如何创建此linq查询

如何创建此linq查询,linq,Linq,我有一种情况,我有一个ID列表,比如{1,2,3,4}。我需要将另一个ID列表传递到一个方法中,如果列表中的数字相同,则返回true,否则如果任何一个列表不相同(忽略顺序),则需要返回false。因此,使用{1,2,3,4,5}调用方法应返回false,而使用{2,4,1,3}调用方法应返回true。这听起来很简单,但我不知道怎么做 最简单的方法可能是: var idSet = new HashSet<int>(idList1); if (idSet.SetEquals(idList

我有一种情况,我有一个ID列表,比如{1,2,3,4}。我需要将另一个ID列表传递到一个方法中,如果列表中的数字相同,则返回true,否则如果任何一个列表不相同(忽略顺序),则需要返回false。因此,使用{1,2,3,4,5}调用方法应返回false,而使用{2,4,1,3}调用方法应返回true。这听起来很简单,但我不知道怎么做

最简单的方法可能是:

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

根据注释,这将考虑{ 1, 1, 1,1, 1 }等于{ 1 } -换句话说,它将它视为集合而不是可能的重复值的无序集合。

如果您保证不在<代码> IDList中重复元素,则可以使用以下内容:

if (idList.Count == otherIDList.Count &&
    idList.Intersect(otherIDList).Count() == idList.Count)
{
    // Contain same things.
}
else
{
    // Do not contain same things.
}
第一个检查是确保它们大小相同。这是一种非常便宜的方法,可以查看列表是否有可能与字符串相同。另外,如果
otherIDList
idList
的超集,没有它,则语句将返回true


如果您不能保证集合中的唯一性,我认为您必须自己编写一些代码。

提醒您,LINQ不是处理集合的灵丹妙药。我要补充一点,如果列表中有重复元素,这将不起作用。有人说它们是问题中的ID,因此可以假设它们不会重复。但这并没有明确说明。谢谢。我在考虑intersect方法,但我记不起它叫什么了。再次感谢!