2010-10-19 70 views
2

我想创建以下WHERE子句动态表情:动态创建一个表达式调用方法EntityFunctions.DiffDays

context.Cars. 
Where(c => EntityFunctions.DiffDays(c.Created, c.Created) == null). 
ToList() 

这是我使用,以创建表达代码:

var parameter = Expression.Parameter(typeof(Car), "c"); 
var property = Expression.Property(parameter, "Created"); 
var function = Expression.Call(typeof(EntityFunctions), "DiffDays", 
    null, property, property); 
var comparison = Expression.Equal(function, Expression.Constant(null)); 
var result = Expression.Lamda<Func<Car, bool>>(comparison, parameter); 

结果显示(它似乎缺少“EntityFunctions.DiffDays”):

{c => (DiffDays(c.Created, c.Created) == null)} 

当我尝试执行:

context.Cars.Where(result.Compile()).ToList() 

我得到的错误信息:

此功能只能从 LINQ调用,以实体

你知道我缺少什么?是因为它只显示“DateDiff”而不是“EntityFunctions.DateDiff”

谢谢。亚当

回答

2

你的最后一行中删除“编译()”调用,就像这样:

context.Cars.Where(result).ToList(); 

并推迟编译到LinqToEntities。