2010-01-29 74 views

回答

-1

Count()方法需要一个谓语,所以你会做这样的事情:

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

这只会检查是否有与'MyObject.Order'等于'1'的重复。它忽略了与'MyObject.Order'相同的任何其他'int'重复的可能性。 – jason 2010-01-29 14:44:39

+0

这只会测试是否有多个对象的Order == 1,而不是如果有两个对象具有相同(未知)的值。 – 2010-01-29 14:45:30

11

首先GroupByMyObject.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

不是一个纯粹的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²)查找结果快速结束。

+0

您可以通过避免中间'List '来提高性能。 'HashSet '构造函数可以直接使用'IEnumerable '。 – LukeH 2010-01-29 15:20:38

+0

什么是'O(n^2)'查找? – jason 2010-01-29 15:21:54

+0

@Luke,yap谢谢,我过于复杂。当然,ordersList将始终与原始列表具有相同的计数。 – herzmeister 2010-01-29 15:37:34

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

Distinct怎么样?

bool allUnique = ordersList.Count == ordersList.Select(o => o.Order).Distinct().Count() 
相关问题