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