こんばんは。きわさです。
引き続き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に置き換えられるかもしれません。