C# LINQ(ラムダ式 - 結合)
ラムダ式で記述するLINQの結合のサンプルです。
クエリ式のサンプルはこちらをご覧ください。
このページのサンプルは以下データを元にしています。
- 【データクラス(社員)】
-
class Syain { public Syain(string id, string name, int age, string dept) { this.id = id; this.name = name; this.age = age; this.dept = dept; } public string id { get; set; } // 社員ID public string name { get; set; } // 名前 public int age { get; set; } // 年齢 public string dept { get; set; } // 部署コード }
- 【データクラス(部署)】
-
class Dept { public Dept(string deptCd, string deptNm) { this.deptCd = deptCd; this.deptNm = deptNm; } public string deptCd { get; set; } // 部署コード public string deptNm { get; set; } // 部署名 }
- (List生成)
-
var syainList = new List<Syain>(); syainList.Add(new Syain("002", "山田", 35, "EI")); syainList.Add(new Syain("004", "鈴木", 28, "EI")); syainList.Add(new Syain("005", "高橋", 46, "KE")); syainList.Add(new Syain("001", "鈴木", 32, "SO")); syainList.Add(new Syain("003", "伊藤", 25, "KA")); syainList.Add(new Syain("006", "佐藤", 30, "KA")); syainList.Add(new Syain("007", "田中", 42, "KA")); var deptList = new List<Dept>(); deptList.Add(new Dept("EI", "営業部")); deptList.Add(new Dept("KE", "経理部")); deptList.Add(new Dept("SO", "総務部")); //deptList.Add(new Dept("KA", "開発部")); ※「開発部」は以下サンプルを分かりやすくするためあえて作成していません。
Linqを使う時は「System.Linq」をインポートしてください。
- (System.Linqのインポート宣言)
-
using System.Linq
内部結合(inner join)
- 例)Syain.deptとDept.deptCdを内部結合する
-
var result = syainList .Join(deptList, x => x.dept, y => y.deptCd, (x,y) => new{x.id, y.deptNm}) .ToArray();
- 【結果】
- [002 営業部] [004 営業部] [005 経理部] [001 総務部]
※内部結合ではDeptに開発部が無いので抽出されません。
外部結合(left outer join)
- 例)Syain.deptとDept.deptCdを外部結合する
-
var result = syainList .GroupJoin(deptList, x => x.dept, y => y.deptCd, (a, b) => new { a,b }) .SelectMany(x => x.b.DefaultIfEmpty(),(x, y) => new { id = x.a.id, deptNm = (y != null) ? y.deptNm : "" });
- 【結果】
- [002 営業部] [004 営業部] [005 経理部] [001 総務部] [003 ] [006 ] [007 ]
※外部結合ではDeptに開発部が無くても抽出されます。