C#lambda得到不同的值列表

时间:2012-08-29 12:13:12

标签: c# linq lambda

我有一个用户列表,如下所示:

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" });

在这里,我希望通过C# lambda expression

获取具有相似城市的不同用户ID

所以,在上面的情况下,我应该得到一个List<string>,它只包含UserId = 12项,因为UserId是相同的,而且两个项目的city也相同。

请您告诉我如何通过C#lambda代码执行此操作。

提前致谢。

1 个答案:

答案 0 :(得分: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);