使用linq检查列表中的所有项是否出现在另一个列表中

时间:2011-12-13 09:13:54

标签: sql linq list comparison

我在这里遇到了问题。我试图使用linq将列表中的项目与另一个列表中的项目进行比较。

例如:

list 1: 10,15,20
list 2: 10,13,14,15,20,30,45,54,67,87

如果TRUE中的所有项目都出现在list 1中,我应该list 2。所以上面的例子应该返回TRUE

就像你可以看到我无法使用sequenceEquals

有什么想法吗?

编辑:

list2实际上不是一个列表,它是sql中的列,具有以下值: <id>673</id><id>698</id><id>735</id><id>1118</id><id>1120</id><id>25353</id>

在linq中,由于Jon Skeets的帮助,我做了以下查询:

var query = from e in db
            where e.taxonomy_parent_id == 722
            select e.taxonomy_item_id;

此时查询是IQueryable多头

var query2 = from e in db
             where query.Contains(e.taxonomy_item_id)
             where !lsTaxIDstring.Except(e.taxonomy_ids.Replace("<id>", "")
                                                       .Replace("</id>", "")
                                                       .Split(',').ToList())
                                 .Any()
             select e.taxonomy_item_id;

但现在我收到错误Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator

3 个答案:

答案 0 :(得分:8)

怎么样:

if (!list1.Except(list2).Any())

这是我能想到的最简单的方法。如果需要,您可以显式创建集等:

HashSet<int> set2 = new HashSet<int>(list2);
if (!list1.Any(x => set2.Contains(x)))

但我希望无论如何都要实现Except

答案 1 :(得分:3)

这应该是你想要的:

!list1.Except(list2).Any() 

答案 2 :(得分:2)

var result = list1.All(i => list2.Any(i2 => i2 == i));