C#拉姆达得到的值不同列表有条件(C# lambda get distinct list of va

2019-07-31 06:32发布

我有一个用户列表下面给出:

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

在这里,我想不同的用户ID那些具有不同的城市 C# lambda expression

因此,在上述情况下,我应该得到一个List<string>这将只包含用户ID = 11项,因为用户ID是相同的,但城市是两个不同的项目。

能否请你让我知道我会怎么用C#拉姆达代码做到这一点。

提前致谢。

Answer 1:

就像是:

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

应该这样做。

它采用{用户ID,城市}对和转换成由用户ID索引的那些双基; 然后查找那里是该组中的一个以上的城市的情况。 最后,采取从组对结果的关键。



Answer 2:

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


Answer 3:

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


文章来源: C# lambda get distinct list of value conditionally
标签: c# linq lambda