2016-03-31 48 views
-1

我有一個bool方法的類,例如:我可以在實體框架代碼優先中使用我的領域模型中的謂詞嗎?

public bool IsInFuture() 
{ return this.Date > DateTime.Now; } 

而且我把它保存在使用EF代碼第一次的數據庫。如果我將嘗試使用Linq中的操作說明上游,我會得到一個例外,因爲它不能被轉換成SQL:

await context.Where(order => order.IsInFuture()).ToListAsync(); 

這個謂詞的邏輯可以是相當複雜的,我不希望在我的代碼中複製它。有什麼辦法可以將代碼嵌入到Linq操作中?我很確定,這個問題有一個解決方案。

在此先感謝!

+0

爲什麼這需要是布爾方法?它看起來只是一個返回屬性,然後你可以在你使用這個linq等待context.Where(order => order.IsInFuture).ToListAsync(); –

+0

然後我需要將這些屬性存儲在數據庫中。我需要他們來計算。 – Waldemar

+3

您不能使用自定義功能。您可以使用表達式,但必須可以轉換爲SQL。 –

回答

0

您不能直接使用謂詞。 EF如何知道如何將其轉換爲SQL WHERE語句?

您有幾種選擇:

  • 修改你的查詢中使用標準操作,例如小超。但是,這將複製謂詞中的邏輯。
  • 使用原始SQL查詢。這也將複製邏輯,但在SQL中。
  • 加載實體的整個列表,然後過濾內存中的內容(即在ToList()之後的Where())。像這樣,你可以重用謂詞。 請注意,這對於非常小的數據集來說只是一個好主意。
+0

我有一個想法強制謂詞函數被內聯。理論上這應該有所幫助。我會盡量在幾天內完成。也許有人有經驗,可以分享嗎? – Waldemar

相關問題