如何创建此linq查询
我有一种情况,我有一个ID列表,比如{1,2,3,4}。我需要将另一个ID列表传递到一个方法中,如果列表中的数字相同,则返回true,否则如果任何一个列表不相同(忽略顺序),则需要返回false。因此,使用{1,2,3,4,5}调用方法应返回false,而使用{2,4,1,3}调用方法应返回true。这听起来很简单,但我不知道怎么做 最简单的方法可能是:如何创建此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
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方法,但我记不起它叫什么了。再次感谢!