如何用linq表达式划分属性

时间:2012-03-21 15:48:37

标签: c# linq lambda linq-to-entities

想象我有一个实体:

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,

1 个答案:

答案 0 :(得分:2)

你需要创建这样的除法表达式:

Expression.Divide(prop, Expression.Constant((Nullable<Int64>)16, prop.Type))

有必要将16显式转换为属性的类型,因为当用作文字时,它的类型为Int32,显然与Nullable<Int64>不同。