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