2012-08-29 57 views
1

不同的名單上有用戶的列表下面給出:C#拉姆達得到的值

List<User> users = new List<User>(); 

users.Add(new User(){ UserId = "11", City = "London" }); 
users.Add(new User(){ UserId = "12", City = "London" }); 
users.Add(new User(){ UserId = "12", City = "London" }); 
users.Add(new User(){ UserId = "11", City = "Newyork" }); 
users.Add(new User(){ UserId = "14", City = "Virginia" }); 

在這裏,我想獲得不同的用戶ID由C# lambda expression那些具有相似市

所以,在上面的情況下,我應該得到一個List<string>,它將只包含UserId = 12項目,因爲UserId是相同的,城市對於這兩個項目也是相同的。

能否讓我知道我將如何通過C#lambda代碼來實現這一點。

在此先感謝。

+0

可能重複獲得不同的價值清單的條件](http://stackoverflow.com/questions/12176389/c-sharp-lambda-get-distinct-list-of-value-conditionally) –

+1

第一次問[*「我想獲得不同的UserIDs那些有不同的城市「*](http://stackoverflow.com/questions/12176389/c-sharp-lambda-get-distin ct-list-of-value-conditionally)然後沒有顯示任何努力詢問*「我想獲得不同的UserIDs那些有類似的城市」* –

回答

2

您的User型號是否適當覆蓋EqualsGetHashCode?如果是這樣,它是那樣簡單:

var duplicated = users.GroupBy(x => x) 
         .Where(g => g.Count() > 1) 
         .Select(g => g.Key.UserId); 

如果沒有,你應該考慮覆蓋EqualsGetHashCode,或者你可以只使用匿名類型:

var duplicated = users.GroupBy(x => new { x.UserId, x.City }) 
         .Where(g => g.Count() > 1) 
         .Select(g => g.Key.UserId); 
[C#拉姆達的
+0

@MarcGravell:我只是添加了那個東西:) –

+0

匿名類型的技巧是真的很整齊。把它添加到我的工具箱中。 –

+0

@JonSkeet非常感謝! – nunu