根据某些属性确定列表中的两个或多个对象是否相等

时间:2010-01-29 14:33:47

标签: c# .net linq linq-to-objects

说我有一个列表List<MyObject> myObjectListMyObject对象具有名为Order的属性,其类型为int。如何使用LINQ-to-objects确定myObjectList中的两个或多个对象是否具有相同的Order

5 个答案:

答案 0 :(得分:11)

首先GroupBy MyObject.Order,然后确定这些组中的Any是否有多个成员:

bool b = myObjectList.GroupBy(x => x.Order)
                     .Any(g => g.Count() > 1);
// b is true is there are at least two objects with the same Order
// b is false otherwise

答案 1 :(得分:2)

bool hasDuplicates = myObjectList.Count >
    new HashSet<int>(myObjectList.Select(x => x.Order)).Count;

答案 2 :(得分:1)

不是纯粹的Linq-To-Objects-Solution,但是如何:

var ordersList = new List<Order>(myObjectList.Select(obj => obj.Order);
bool allUnique = ordersList.Count == new HashSet<Order>(ordersList).Count;

必须测试此处介绍的所有方法的性能。我会小心,否则你会很快找到一些缓慢的O(n²)查找。

答案 3 :(得分:1)

Distinct怎么样?

bool allUnique = ordersList.Count == ordersList.Select(o => o.Order).Distinct().Count()

答案 4 :(得分:-1)

Count()方法采用谓词,因此您可以执行以下操作:

if(myObjectList.Count(x => x.Order == 1) >= 2)
{
    // Do something
}