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が異なる個別の UserIDを取得したいと考えています。C# lambda expression

したがって、上記の場合、List<string>UserId は同じですが、都市は両方のアイテムで異なるため、 UserId = 11 アイテムのみを含む を取得する必要があります。

C#ラムダコードでこれを行う方法を教えてください。

前もって感謝します。

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 に答える