我有一个用户列表,如下所示:
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
所以,在上面的情况下,我应该得到一个List<string>
,它只包含UserId = 12项,因为UserId是相同的,而且两个项目的city也相同。
请您告诉我如何通过C#lambda代码执行此操作。
提前致谢。
答案 0 :(得分:2)
您的User
类型是否适当覆盖Equals
和GetHashCode
?如果是这样,它就像:
var duplicated = users.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key.UserId);
如果没有,您应该考虑覆盖Equals
和GetHashCode
,或者 只能使用匿名类型:
var duplicated = users.GroupBy(x => new { x.UserId, x.City })
.Where(g => g.Count() > 1)
.Select(g => g.Key.UserId);