2015-04-24 21 views
1

我有一個名爲Invoice的類此方法之間解決方法:能不可枚舉和可查詢的考生

public static Expression<Func<Invoice, bool>> IsAllocated() 
{ 
    return i => i.TotalAmountDue == i.GetAllocationsTotal(); 
} 

我有一個這樣的名單:

IQueryable<Invoice> invoices 

,我需要過濾它像(這是LINQ到實體):

var filteredInvoices = invoices.Where(i => Invoice.IsAllocated()); 

在這一行我得到兩個錯誤:

無法解析方法...候選人是...... Enumerable中的一個,另一個位於Queryable中。

而且也:

無法轉換表達式類型Expression<Func<Invoice,bool>>到 返回類型「布爾」

我已經嘗試了很多東西,我在SO發現沒有運氣。有人可以說我在這裏或者至少失去了什麼,這兩個錯誤中的哪一個是問題的根源?

+1

我會說下一個障礙將是'i.GetAllocationsTotal()':-) – xanatos

+0

@xanatos你是100 %right :) – daniloquio

+0

對於其他登陸此處的Google用戶,請確保您在lambda中使用'=='而不是'='。 –

回答

4

你的方法已經返回相應的表達式目錄樹 - 你只需要調用它,在一個lambda表達式不能稱之爲

var filteredInvoices = invoices.Where(Invoice.IsAllocated()); 
+0

就是這樣,現在我更接近理解_Lambda Expressions_。謝謝。 – daniloquio

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)); 
+0

不,OP *想將它作爲表達式樹 - 重點是將表達式樹傳遞給LINQ提供程序以在數據庫中進行過濾。 –

+0

啊,你再次......是需要在這裏用無形的墨水書寫的表達樹。在這個問題上看不到這個問題.. – XtremeBytes

+1

那麼,如果OP * *只是想要一個委託,那麼他們爲什麼會去製作一個表達式樹呢?爲什麼他們想要強制查詢在客戶端執行時不需要?根據我們的上下文(EF和'IQueryable '......) –