无法解析Enumerable和Queryable候选之间的方法

时间:2015-04-24 19:57:42

标签: c# lambda linq-to-entities

我在名为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中找到的没有运气的东西。有人能告诉我这里缺少什么,或者至少,这两个错误中哪一个是问题的根源?

2 个答案:

答案 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));