1

以下に示すようなユーザーのリストがあります。

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 = 12 アイテムのみを含む を取得する必要があります。これは、両方のアイテムで UserId が同じであり、city も同じであるためです。

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

前もって感謝します。

4

1 に答える 1

2

あなたのタイプは適切にUser上書きEqualsされていますか?GetHashCodeもしそうなら、それは次のように簡単です:

var duplicated = users.GroupBy(x => x)
                      .Where(g => g.Count() > 1)
                      .Select(g => g.Key.UserId);

そうでない場合は、おそらくEqualsandGetHashCodeをオーバーライドすることを検討する必要があります。または、匿名型を使用することもできます。

var duplicated = users.GroupBy(x => new { x.UserId, x.City })
                      .Where(g => g.Count() > 1)
                      .Select(g => g.Key.UserId);
于 2012-08-29T12:15:04.580 に答える