4

我有 3 个列表列表

ListMaster contains {1,2,3,4,....} ..getting populated from DB
List1 contains {1,3,4}
List2 contains {1,3,95}

如何使用 linq 检查主列表中存在哪些列表项

4

3 回答 3

5
var inMaster = List1.Intersect(ListMaster);

或两个列表:

var inMaster = List1.Intersect(List2).Intersect(ListMaster);

检查list1,list2中的任何项目是否存在于master中

var existInMaster = inMaster.Any();
于 2013-05-31T08:16:28.623 回答
3

您可以使用Enumerable.Intersect

var inMaster = ListMaster.Intersect(List1.Concat(List2));

如果您想知道哪些List1不在主列表中,请使用Except

var newInList1 = List1.Except(ListMaster);

List2

var newInList2 = List2.Except(ListMaster);

我可以使用列表 .all 检查另一个列表中列表的所有项目以获取字符串列表

所以你想知道一个列表的所有项目是否都在另一个列表中。然后使用Except+Any效率更高(如果列表很大),因为Intersect并且Except在内部使用集合,而All循环所有元素。

例如,主列表是否包含所有字符串List1List2

bool allInMaster = !List1.Concat(List2).Except(ListMaster).Any();
于 2013-05-31T08:17:13.820 回答
2

您可以使用Enumerable.Intersect类似的方法;

通过使用默认相等比较器比较值来生成两个序列的集合交集。

var inMaster1 = List1.Intersect(ListMaster);
var inMaster2 = List2.Intersect(ListMaster);

这是一个DEMO.

于 2013-05-31T08:17:31.603 回答