簡體   English   中英

Linq AND列表中的每個項目

[英]Linq AND for each item in list

我有一個整數列表。 我需要從數據源中選擇元素,其中特定的字段/列與列表中的每個int匹配。

數據源示例

ItemID  ListID
1       1
1       2
2       1

我想從包含列表ID 1和2的列表中找到與所有ListID匹配的所有項目。

目前我正在使用...

List<Item> items = (from element in MyItems where listIDs.Contains(element.ListID) select element).ToList();

但是,這會為每個不同的ItemID跨多個行生成OR查詢,而不是AND查詢。

您可以這樣嘗試:

List<Item> result = MyItems.GroupBy(o => o.ItemID)
                            //find group that contain all listIDs
                           .Where(o => !listIDs.Except(o.Select(x => x.ListID)).Any())
                           //flatten groups to items
                           .SelectMany(o => o)
                           .ToList();

相關問題: 使用Linq確定一個序列是否包含另一個序列的所有元素

如果要比較兩個列表是否相等,則可以使用SequenceEqual方法。

沿線的東西

list<item> results = (from element in MyItems where listIDs.SequenceEqauls(element.ListID) select element).ToList();

我不確定我是否正確理解了您的問題。 當您說“特定字段/列”時,該字段/列也是某種集合嗎?

如果我有你的問題! 然后試試這個

var MyItems=<your data column values>
var ItemsMatch=MyItems.Where(z=>MyIntsList.Contains(int.Pars(z.ToString()))).ToArray();

我不確定我是否理解這個問題。 我認為您有一個列表,並且正在嘗試匹配同時具有ListID和ItemID等於列表中任何項目的行。 如果多數民眾贊成在這是什么,這是一種方法:

List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and listIDs.Contains(element.ItemID)

或者,您正在嘗試匹配同時具有ListID和ItemID都等於列表中SAME項的行。 如果多數民眾贊成在這是什么,這是一種方法:

List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and element.ListID == element.ItemID

如果我正確理解了您的意思,那么它將可以:

var result = (from item in MyItems
              from i in listIDs
              where i == item.ListId
              select item).ToList();

它將獲取MyItems列表中具有ListId的所有Item對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM