C# 对于列表中的每个项目,Linq和

C# 对于列表中的每个项目,Linq和,c#,sql,linq,C#,Sql,Linq,我有一个INT列表。我需要从特定字段/列与列表中的每个int匹配的数据源中选择元素 数据源示例 ItemID ListID 1 1 1 2 2 1 我想从包含列表ID 1和2的列表中查找与所有列表ID匹配的所有项目 目前我正在使用 List<Item> items = (from element in MyItems where listIDs.Contains(element.ListID) select element).ToList();

我有一个INT列表。我需要从特定字段/列与列表中的每个int匹配的数据源中选择元素

数据源示例

ItemID  ListID
1       1
1       2
2       1
我想从包含列表ID 1和2的列表中查找与所有列表ID匹配的所有项目

目前我正在使用

List<Item> items = (from element in MyItems where listIDs.Contains(element.ListID) select element).ToList();
List items=(从listIDs.Contains所在的MyItems中的元素(element.ListID)选择element.ToList();

但是,对于每个不同的ItemID,这会在多行中生成OR查询,而不是and查询。

如果您试图比较两个列表是否相等,则可以使用SequenceEqual方法

类似的东西

list<item> results = (from element in MyItems where listIDs.SequenceEqauls(element.ListID) select element).ToList();
list results=(来自MyItems中的元素,其中listIDs.SequenceEqauls(element.ListID)选择element.ToList();

我不能完全肯定我是否正确理解了你的问题。当你说“特定字段/列”时,该字段/列也是某种集合吗?

如果我明白你的问题!!那就试试这个

var MyItems=<your data column values>
var ItemsMatch=MyItems.Where(z=>MyIntsList.Contains(int.Pars(z.ToString()))).ToArray();
var MyItems=
var ItemsMatch=MyItems.Where(z=>MyIntsList.Contains(int.Pars(z.ToString()))).ToArray();
您可以这样尝试:

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();
List result=MyItems.GroupBy(o=>o.ItemID)
//查找包含所有ListID的组
.Where(o=>!listIDs.Except(o.Select(x=>x.ListID)).Any())
//将组展平到项目
.SelectMany(o=>o)
.ToList();

相关问题:

我不确定我是否理解这个问题。我认为您有一个列表,并且您正在尝试匹配ListID和ItemID都等于列表中任何项的行。如果这就是你想要的,这是一种方法:

List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and listIDs.Contains(element.ItemID)
List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and element.ListID == element.ItemID
List items=MyItems中的from元素
其中listIDs.Contains(element.ListID)和listIDs.Contains(element.ItemID)
或者,您可能正在尝试匹配ListID和ItemID都等于列表中相同项的行。如果这就是你想要的,这是一种方法:

List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and listIDs.Contains(element.ItemID)
List<Item> items = from element in MyItems
where listIDs.Contains(element.ListID) and element.ListID == element.ItemID
List items=MyItems中的from元素
其中listIDs.Contains(element.ListID)和element.ListID==element.ItemID

如果我正确理解了您的意思,这就可以:

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

它将获取MyItems列表中ListId存在于ListId中的所有Item对象。

Intersect?是否需要MyItems和ListId共用的元素?是否仅将itemId或itemId和ListId与MyItems中的相应列匹配