我有一份整体清单。我需要从数据源中选择元素,其中特定字段/列与列表中的每个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查询。
答案 0 :(得分:1)
您可以尝试这种方式:
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();
相关问题:Determine if a sequence contains all elements of another sequence using Linq
答案 1 :(得分:0)
如果您尝试比较两个列表是否相等,那么您可以使用SequenceEqual方法。
一些事情
list<item> results = (from element in MyItems where listIDs.SequenceEqauls(element.ListID) select element).ToList();
我不完全确定我是否理解你的问题。当你说“特定字段/列”时,那个字段/列也是某种集合吗?
答案 2 :(得分:0)
如果我有你的问题!!然后尝试这个
var MyItems=<your data column values>
var ItemsMatch=MyItems.Where(z=>MyIntsList.Contains(int.Pars(z.ToString()))).ToArray();
答案 3 :(得分:0)
我不确定我理解这个问题。我认为你有一个列表,你正在尝试匹配同时具有ListID和amp;的行。 ItemID等于列表中的 ANY 项。如果你正在尝试这个,这是一种方法:
List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and listIDs.Contains(element.ItemID)
或者您可能正在尝试匹配同时包含ListID和&amp;的行。 ItemID等于列表中的 SAME 项。如果你正在尝试这个,这是一种方法:
List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and element.ListID == element.ItemID
答案 4 :(得分:0)
如果我理解正确,这样做:
var result = (from item in MyItems
from i in listIDs
where i == item.ListId
select item).ToList();
它将获取MyItems列表中ListId中存在ListId的所有Item对象。