未分類

C# LINQ - 1 対多のリレーションシップを実現する

準備

1. こちらを参考にして、SQL Server 用の NORTHWND.MDF を用意します。
2. NORTHWND.MDF ファイルをソリューションエクスプローラーのプロジェクトノードにドラッグ & ドロップします。
- データセットを選択して、[次へ] をクリックします。
- テーブルにチェックを付けて、[完了] をクリックします。
2. プロジェクトに新しい項目として、LINQ to SQL クラスを追加します。名前を Northwnd.dbml とします。
3. ソリューションエクスプローラーから Northwnd.dbml を開きます。
4. サーバーエクスプローラーからテーブルの employee と EmployeeTerritories をNorthwnd.dbml にドラッグ & ドロップします。

デザイン

1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にリストボックス (listBox1) を配置します。

サンプルコード (C#)

// 名前空間の追加
// (なし)

// コード
private void button1_Click(object sender, EventArgs e)
{
  NorthwndDataContext North = new NorthwndDataContext();
  
  var query = from emp in North.Employees
  select new
  {
    emp.LastName,
    emp.FirstName,
    emp.EmployeeTerritories.Count
  };
  
  foreach (var emp in query)
  {
    listBox1.Items.Add(emp.LastName + " " + emp.FirstName + "(" + emp.Count + ")");
  }
}

解説

Employee ごとの Territories 数を算出する SQL を実行しています。つまり、employee ごとに EmployeeTerritories テーブルをクエリーして、EmployeeTerritories テーブルで何回 Employee が使われているかを算出しています。

結果

IDE の [出力] タブに出力されます。(C#, VB.NET)

動作確認環境

Visual Studio 2015 Professional (C# 6.0)

-未分類