1

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

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

在这里,我想通过以下方式获得具有相似 City的不同 UserIDC# lambda expression

因此,在上述情况下,我应该得到一个List<string>仅包含 UserId = 12 的项目,因为 UserId 是相同的,并且两个项目的城市也是相同的。

您能否让我知道如何通过 C# lambda 代码执行此操作。

提前致谢。

4

1 回答 1

2

您的User类型是否覆盖EqualsGetHashCode适当?如果是这样,它很简单:

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

如果没有,您可能应该考虑覆盖Equalsand GetHashCode,或者您可以只使用匿名类型:

var duplicated = users.GroupBy(x => new { x.UserId, x.City })
                      .Where(g => g.Count() > 1)
                      .Select(g => g.Key.UserId);
于 2012-08-29T12:15:04.580 回答