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", "開発部"));
※「開発部」は以下サンプルを分かりやすくするためあえて作成していません。
内部結合(inner join)
- 例)Syain.deptとDept.deptCdを内部結合する
-
var result = (from x in syainList join y in deptList on x.dept equals y.deptCd select new { x.id, y.deptNm }).ToArray();
- 【結果】
- [002 営業部] [004 営業部] [005 経理部] [001 総務部]
※内部結合ではDeptに開発部が無いので抽出されません。
外部結合(left outer join)
- 例)Syain.deptとDept.deptCdを外部結合する
-
var result = (from x in syainList join y in deptList on x.dept equals y.deptCd into z from y in z.DefaultIfEmpty() select new { id = x.id, deptNm = (y != null)?y.deptNm:"" }).ToArray();
- 【結果】
- [002 営業部] [004 営業部] [005 経理部] [001 総務部] [003 ] [006 ] [007 ]
※外部結合ではDeptに開発部が無くても抽出されます。