如何使用表达式<func <model,bool =“”>&gt;在Linq到EF的条件?</func <model,>

时间:2011-10-17 15:27:32

标签: c# linq entity-framework linq-to-entities linqkit

关于这个主题已经存在一些问题(例如Expression.Invoke in Entity Framework?),但是,我无法找到适合我具体情况的答案。 我想定义一个这样的方法:

public IQueryable<Customer> GetCustomers(Expression<Func<Customer, bool>> condition)
{
    return from p in ctx.Customers.AsExpandable()
        where condition.Compile()(p)
        select p;
}

AsExpandable方法来自LinqKit(正如之前提到的线程中所建议的那样)。 但是,当我尝试像他的方式调用我的方法时:

var customers = GetCustomers(c => c.ID == 1);

抛出InvalidCastException:

  

无法将类型为“System.Linq.Expressions.InstanceMethodCallExpressionN”的对象强制转换为“System.Linq.Expressions.LambdaExpression”。   我做错了什么?

1 个答案:

答案 0 :(得分:5)

如果要使用表达式树,则需要将表达式树本身传递给LINQ方法:

return ctx.Customers.AsExpandable().Where(condition)