2015-03-31 57 views
0

爲了保持我的描述簡單,我們假設我有一個包含LineItem對象列表的Order對象。實體框架將過濾器應用於父對象和子對象

我需要應用一個非常複雜的過濾器,根據LineItem條件找到某個Orders。簡單的例子:

var orders = db.Order.Where(o => o.LineItems.Any(li => li.Price == 1.00)); 

這會給我正確的Orders,但是當我展開Order.LineItems,我得到的所有LineItems,不只是篩選出的。

看來我需要再次將濾鏡應用到Order.LineItems我爲每個Order處理?正如我之前所說,選擇標準可能相當複雜,其中有30個或更多的條款。

是否有更簡單的方法來編寫查詢?

+0

你並不需要執行另一個查詢分組。您的第一個查詢將返回至少包含一個訂單項的所有訂單,使其價格爲1.00。因此,稍後訪問訂單的訂單項時,請檢查其價格是否等於1.00。 – 2015-04-02 09:40:02

+0

@ShoaibShakeel正如我所說的,查詢可能非常複雜,因此循環遍歷所有行項目並逐個應用篩選器並不是真正的解決方案。需要過濾器發生在SQL服務器上,並只能打消這些信息。 「訂單」和「訂單項」只是簡化問題的一種方式。有成千上萬的「訂單」和數百萬的「訂單項」。 – Wavel 2015-04-02 17:41:15

+0

爲什麼'var liGroups = db.LineItems.Where(li => li.Price == 1.00).GroupBy(li => li.Order);'? – 2015-04-16 01:13:29

回答

1

下面將返回LineItems通過Order

var liGroups = db.LineItems.Where(li => li.Price == 1.00).GroupBy(li => li.Order);