Linq AND列表中的每个项目

时间:2014-07-07 02:57:30

标签: c# sql linq

我有一份整体清单。我需要从数据源中选择元素,其中特定字段/列与列表中的每个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查询。

5 个答案:

答案 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对象。