2

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

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 = 11 的项目,因为 UserId 相同,但两个项目的城市不同。

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

提前致谢。

4

3 回答 3

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 索引的那些对的组;然后查找该组中存在多个城市的情况。最后从组中获取结果的关键。

于 2012-08-29T11:05:12.537 回答
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
于 2012-08-29T11:06:01.897 回答
0
var list = users.GroupBy(Obj=>new {Obj.UserID,Obj.City}).Distinct();
于 2012-08-29T11:43:40.490 回答