我在名为Invoice的类中使用此方法:
public static Expression<Func<Invoice, bool>> IsAllocated()
{
return i => i.TotalAmountDue == i.GetAllocationsTotal();
}
我有一个这样的清单:
IQueryable<Invoice> invoices
我需要像那样过滤它(它的Linq to Entity):
var filteredInvoices = invoices.Where(i => Invoice.IsAllocated());
在这一行中,我遇到两个错误:
无法解析方法......候选者是......一个在Enumerable中,另一个在Queryable中。
还有:
无法将表达式
Expression<Func<Invoice,bool>>
转换为 返回类型&#39; bool&#39;
我已经尝试了很多我在SO中找到的没有运气的东西。有人能告诉我这里缺少什么,或者至少,这两个错误中哪一个是问题的根源?
答案 0 :(得分:4)
您的方法已经返回一个合适的表达式树 - 您只需要调用它,而不是在lambda表达式中调用 :
var filteredInvoices = invoices.Where(Invoice.IsAllocated());
答案 1 :(得分:0)
表达是表示而不是自己委托。你应该首先创建一个委托
static Expression<Func<Invoice, bool>> IsAllocatedExpr()
{
return i => i.TotalAmountDue == i.GetAllocationsTotal();
}
public static Func<Invoice, bool> IsAllocated = IsAllocatedExpr().Compile();
然后
var filteredInvoices = invoices.Where(i => Invoice.IsAllocated(i));