C#lambda有条件地获得不同的值列表

我有一个用户列表如下:

List users = new List(); 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 by C# lambda expression 不同UserID

因此,在上面的情况下,我应该得到一个List ,它只包含UserId = 11项,因为UserId是相同的,但是两个项目的城市不同。

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

提前致谢。

就像是:

 var result = users.GroupBy(u => u.UserId) .Where(g => g.Select(u => u.City).Distinct().Count() > 1) .Select(g => g.Key) .ToList(); 

应该这样做。

它需要{UserId,City}对并转换为UserId索引的那些对的组; 然后查找组中有多个城市的情况。 最后从组中取出关键结果。

 from u in users group u.City by u.UserId into grp //group on the id where grp.Distinct().Count() > 1 // we only want those with more than one distinct city select grp.Key //we want the key 
 var list = users.GroupBy(Obj=>new {Obj.UserID,Obj.City}).Distinct();