想象我有一个实体:
MyEntity
{
...
Nullable<Int64> MyProperty
...
}
我想做这样的事情:
Ctx.MyEntity.Where(x=>x.MyProperty/16 == 10)
使用Linq.Expression
所以我创建了一个参数:
var param = Expression.parameter(typeOf(MyEntity));
然后属性:
var prop = Expression.PropertyOrField(param,"MyProperty");
如果我想比较10,我会做这样的事情:
var cmp = Expression.equal(prop,Expression.constant(10,prop.Type));
但首先我需要将道具除以16。
所以我试试:
var div = Expression.Divide(prop,Expression.constant(16, prop.type);
这引发了不匹配类型的例外。
有人可以帮忙吗?
THX,
答案 0 :(得分:2)
你需要创建这样的除法表达式:
Expression.Divide(prop, Expression.Constant((Nullable<Int64>)16, prop.Type))
有必要将16显式转换为属性的类型,因为当用作文字时,它的类型为Int32
,显然与Nullable<Int64>
不同。