如何创建这个linq查询

时间:2010-10-07 20:29:40

标签: linq

我的情况是我有一个id列表,例如{1,2,3,4}。我需要传入另一个id列表的方法,如果列表中有相同的数字,则返回true,否则如果任一列表不相同(忽略排序)我需要返回false。因此,使用{1,2,3,4,5}的方法调用应该返回false,而使用{2,4,1,3}的调用返回true。这听起来很简单,但我无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:2)

最简单的方法可能就是:

var idSet = new HashSet<int>(idList1);
if (idSet.SetEquals(idList2))
{
    ...
}

根据评论,这会将{1,1,1,1,1}视为等于{1} - 换句话说,它会将其视为一个集合而不是可能重复值的无序集合

答案 1 :(得分:0)

如果您确保idList中没有重复元素,则可以使用以下内容:

if (idList.Count == otherIDList.Count &&
    idList.Intersect(otherIDList).Count() == idList.Count)
{
    // Contain same things.
}
else
{
    // Do not contain same things.
}

第一项检查是确保它们的大小相同。这是一种非常便宜的方式来查看列表是否有可能是相同的,与字符串相同。此外,如果没有它,如果otherIDListidList的超集,则该语句将返回true。

如果你不能保证集合中的独特性,我认为你将不得不自己编写代码。