首页> C#>如何分割属性与LINQ表达式
作者:互联网
想象我有一个实体:
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));
但首先我需要将prop除以16.
所以我尝试:
var div = Expression.Divide(prop,Expression.constant(16, prop.type);
并抛出不匹配类型的异常.
有人可以帮忙吗?
谢谢,
解决方法:
您需要创建如下的除法表达式:
Expression.Divide(prop, Expression.Constant((Nullable<Int64>)16, prop.Type))
必须明确地将16转换为属性的类型,因为当用作文字时,它的类型为Int32,这显然与Nullable< Int64>不同.
标签:linq-to-entities,linq,c,lambda 来源: https://codeday.me/bug/20191201/2081866.html