小编Mor*_*anB的帖子

表达式树 - 不必要的转换为int32

表达式树在处理字节和短路时似乎构建了不必要的转换,它们将双方(例如二进制表达式)转换为int32.

这是我见过的一些Linq提供程序中的一个问题,每个都必须剥离这个冗余层才能获得原始表达式.(NHibernate不会删除此层并在SQL查询中创建可怕的CAST).

// no conversion
Console.WriteLine((Expression<Func<int, int, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<short, short, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<byte, byte, bool>>) ((s, s1) => s == s1));
Run Code Online (Sandbox Code Playgroud)

如果您尝试构建一个能够进行精确比较的表达式(没有转换),那么您将获得成功.

所以问题是,这种行为的原因是什么?

EDIT .net 4.0 64bit,同样适用于4.5 64bit

c# linq nhibernate expression-trees

12
推荐指数
2
解决办法
985
查看次数

标签 统计

c# ×1

expression-trees ×1

linq ×1

nhibernate ×1