感謝您的期待!如何使用LINQ過濾和處理基於孩子和比較器之間相交值的結果?
背景
我正在用C#編寫,並使用LINQ查詢報表的實體。在這份報告中,我有一個實體的集合,基本上是這樣的:
Customer{
Name: "Bob",
ProductsPurchased: ArrayOfChildEntities[{
ProductId: 1,
ProductTypeId: 5,
ProductName: "FooBuzz"
},
{...},
{...}]
}
ProductsPurchased
是包含產品類別ID子實體的數組。比方說,我通過在類型ID的陣列,用戶從一個篩選器列表視圖選擇:
var ProductTypesToShow = [1, 3, 5];
因此,對於每一個客戶回來了,我想只顯示他們所購買的產品是類型1
,3
或5
。 如果客戶從未購買過至少一種類型爲1
,3
或5
的產品,則應從結果集中刪除整個客戶對象。
我已經試過
我一直在使用這樣的嘗試:
var customers = db.Customers.Where(c => c.ProductsPurchased.Select(p => ProductTypesToShow.Contains(p.ProductTypeId));
但這種失敗。我也嘗試過的Intersect
和Any
各種版本,但遺憾的是他們都失敗的一個原因或其他,或者他們不能做所有我需要的東西:
只選擇誰購買那種產品的客戶
1
,3
或5
。在將這些數據發送回視圖之前,請刪除所有類型不是
1
,3
或5
的產品。
最後,我寫了一個foreach
怪物,在迭代的初始查詢發現,所有的客戶,然後遍歷其產品按產品類型進行過濾,但是這是太慢(每個查詢約3分鐘!)。
我覺得我必須在這裏丟失一些明顯的東西。任何建議表示讚賞!
我不知道如何使它沒有一些試驗工作,但你'Join'發揮呢? – Mikeb 2013-04-09 16:02:56
我沒有但會。奇怪的是,我最近才發現'LINK'在LINQ中的強大程度。 – 2013-04-09 16:03:54
也許您應該先創建SQL查詢,然後嘗試將其轉換爲LINQ to Entities? – MarcinJuraszek 2013-04-09 16:06:24