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

时间:2012-08-29 10:58:19

标签: 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 = 11项,因为UserId是相同的,但该项目的城市不同。

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

提前致谢。

3 个答案:

答案 0 :(得分:8)

类似的东西:

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索引的那些对的组;然后查找组中有多个城市的情况。最后从组中取出结果的密钥。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

var list = users.GroupBy(Obj=>new {Obj.UserID,Obj.City}).Distinct();