C#のLinqを使ってみる(3)

こんばんは。きわさです。

引き続きC#のLinqについてです。
前回同様にユーザークラスと会社クラスを例にします。

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public int CompanyId { get; set; }
}

public class Company 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
}

ユーザーの所属する会社名を取得するために、UserのリストにCompanyのリストをJoinする、という方法を前回紹介しました。
これは、1つの要素(ユーザー)に対応する要素(会社)は1つ、というケースに使えます。

今回は、
会社ごとに所属する社員の年齢の情報を取得したくなった、といった場合での方法です。
これは、1つの要素(会社)に対応する要素(社員)が複数、というケースです。

var list = companyList.GroupJoin(userList,
                                 company => company.Id,
                                 user => user.CompanyId,
                                 (company, users) => new 
                                 {
                                     CompanyName = company.Name,
                                     Min = users.Min(user => user.Age),
                                     Max = users.Max(user => user.Age),
                                     Average = users.Average(user => user.Age),
                                 });
                       .ToList();

これで会社名と年齢情報(最大、最小、平均)をもったリストが取得できます。
ループを多用している箇所はもしかしたらJoinやGroupJoinに置き換えられるかもしれません。

スポンサーリンク