我有两个清单:
List<int> listA
List<int> listB
如果在listA
中存在listB
中不存在的元素,如何使用LINQ进行检查?我可以使用foreach
循环,但我想知道我是否可以使用LINQ
答案 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();