C# 查找listA是否包含任何不在listB中的元素

C# 查找listA是否包含任何不在listB中的元素,c#,linq,C#,Linq,我有两份清单: List<int> listA List<int> listB var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList(); 列表列表a 列表B 如何使用LINQ检查列表A中是否存在列表B中不存在deosn的元素?我可以使用foreach循环,但是我想知道我是否可以使用LINQlistA来实现。除了(listB)将为您

我有两份清单:

List<int> listA     
List<int> listB
var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList();
列表列表a
列表B

如何使用LINQ检查
列表A
中是否存在
列表B
中不存在deosn的元素?我可以使用
foreach
循环,但是我想知道我是否可以使用LINQ

listA来实现。除了(listB)
将为您提供listA中不在listB中的所有项目,您可以在一行中完成

if (listA.Except(listB).Any())
var res = listA.Where(n => !listB.Contains(n));
这不是最快的方法:如果
listB
相对较长,则应该更快:

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

:)

列表包含返回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);
List listA=新列表();
List listB=新列表();
AddRange(新的int[]{1,2,3,4,5});
AddRange(新的int[]{3,5,6,7,8});
var v=列表A中的x
哪里listB.Contains(x)
选择x;
foreach(int i in v)
控制台写入线(i);

这段代码比较了两个列表,两个列表都包含一个类似“en GB”的CultureCode字段。这将在列表中保留不存在的翻译。(我们需要为文章提供未翻译语言的下拉列表)


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

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

List<int> listA     
List<int> listB
var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList();

是的,它会这样做。但由于这是一个基于集合的操作,因此值得记住的是,结果列表也将删除ListA或ListB中存在的重复项。这是最好的anwser,因为@cadrell0和SLaks提供的解决方案只会检查A是否包含B的所有元素,而不会检查B是否还有与A不匹配的元素。该解决方案在下面的示例中有效。A:[0,1,2,3];B:[0,1,2,3,4]
listA.除外(listB).Any()==false
listA.Any(=>listB.Contains())==true
@TomaszJuszczak-true,但是这个问题只在A包含B中没有的东西时才被特别问到,也就是说,如果B包含A中没有的东西,如果A不包含B中没有的东西,那么这个问题应该被评估为false。所以这个答案是不正确的。(是的,当我第一次阅读时,我误解了这个问题。)因为您实际上使用的是Any中的值,所以不应该使用discard(u),因为这意味着(对于开发人员和编译器)您不关心值