查找列表是否包含列表中没有的任何元素

时间:2012-03-01 21:50:14

标签: c# linq

我有两个清单:

List<int> listA     
List<int> listB

如果在listA中存在listB中不存在的元素,如何使用LINQ进行检查?我可以使用foreach循环,但我想知道我是否可以使用LINQ

执行此操作

7 个答案:

答案 0 :(得分:87)

listA.Except(listB)会为listA中的所有项目提供不在listB中的项目

答案 1 :(得分:37)

if (listA.Except(listB).Any())

答案 2 :(得分:14)

listA.Any(_ => listB.Contains(_))

:)

答案 3 :(得分:6)

您可以在一行中完成

var res = listA.Where(n => !listB.Contains(n));

这不是最快的方法:如果listB相对较长,这应该更快:

var setB = new HashSet(listB);
var res = listA.Where(n => !setB.Contains(n));

答案 4 :(得分:2)

List包含返回bool的方法。我们可以在查询中使用该方法。

List<int> listA = new List<int>();
List<int> listB = new List<int>();
listA.AddRange(new int[] { 1,2,3,4,5 });
listB.AddRange(new int[] { 3,5,6,7,8 });

var v = from x in listA
        where !listB.Contains(x)
        select x;

foreach (int i in v)
    Console.WriteLine(i);

答案 5 :(得分:1)

这段代码比较两个列表,这两个列表都包含CultureCode的字段,例如&#39; en-GB&#39;。这将在列表中留下不存在的翻译。 (我们需要一个非翻译语言的下拉列表)

var compared = supportedLanguages.Where(sl => !existingTranslations.Any(fmt => fmt.CultureCode == sl.Culture)).ToList();

答案 6 :(得分:0)

使用Any()获得两个列表的差。如果满足条件,Linq Any()函数将返回一个布尔值,但是您可以使用它返回两个列表的差值:

var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList();