2017-07-12 123 views
0

我編寫了以下查詢來過濾查詢。我如何使用linq從另一個列表中過濾一個列表

我用First()這是我之前沒注意到的問題,因爲Entity2也是一個集合。它只會過濾第一個Id。

query = query.Where(x => filter.Ids.Contains(x.Entity2.Select(y => y.testId).First())); 

請建議我如何使用contains來檢查Entity2的所有testId屬性?

基本上x.Entity2.Select(Y => y.testId)是ID的列表,我想 檢查它們是否在filter.Ids含有或沒有。

回答

2

如果我理解正確,filter.Idsx.Entity2.Select(y => y.testId)是兩個列表,如果IDS,並且要確保從x.Entity2所有ID也是filter.Ids。在這種情況下,你希望以下內容:

var result = query.Where(x => x.Entity2.Count(y => filter.Ids.Contains(y.testId)) == x.Entity2.Count); 

我們在這裏做的是我們數爲query每個元素,都在它的ID的數量是Entity2filter.Ids。如果該數字等於Entity2中的Ids總數,那麼我們將其包含在結果中。

0

爲了您上面的查詢,你也可以使用Any()Contains()兩個,這將作爲 根據你過濾器收集具有ID和ENTITY2二者也集合,因此假設我寫了這個,

query = query.Where(x => filter.Where(a=> a.Entity2.Any(y=> a.Ids.Contains(y.testId));

但在您的查詢中,您也可以刪除First()並且可以使用ToList(),但是如果數據很大,它將丟失OutofMemoryException

相關問題