DataSource for Entity Framework for WinForms
LiveLinq への切り替え
C1LiveLinq > LiveLinq の開始 > 階層的 LiveLinq 連結 > LiveLinq への切り替え

前述のアプリケーションは、ADO.NET DataTable をデータソースとして公開する bindingSource オブジェクトに依存しています。このアプリケーションを LiveLinq に移行することはとても簡単です。bindingSource オブジェクトが通常の DataTable ではなく、LiveLinq ビューを公開するようにするだけです。

必要な手順は次のとおりです。

  1. プロジェクトに C1.LiveLinq.dll アセンブリへの参照を追加します。
  2. コードが読みやすくなるように、いくつかの using ステートメントを追加します。
    C#
    コードのコピー
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using C1.LiveLinq;
    using C1.LiveLinq.AdoNet;
    using C1.LiveLinq.LiveViews;
    
  3. LiveLinq クエリーを作成し、元の DataTable オブジェクトへの参照に代えて、それを bindingSource オブジェクトの C1DataSource プロパティに割り当ててます。
    C#
    コードのコピー
    private void Form1_Load(object sender, EventArgs e)
    {
      // 自動的に生成されます
      this.productsTableAdapter.Fill(this.nORTHWNDDataSet.Products);
      this.categoriesTableAdapter.Fill(this.nORTHWNDDataSet.Categories);
      // Categories のライブビューを作成します。
      // 各カテゴリは、そのカテゴリの製品のリストを保持します。
      var categoryView =
        from c in nORTHWNDDataSet.Categories.AsLive()
        join p in nORTHWNDDataSet.Products.AsLive()
          on c.CategoryID equals p.CategoryID into g
        select new
        {
          c.CategoryID,
          c.CategoryName,
          FK_Products_Categories = g
        };
      // フォームの DataSource に代えて、LiveLinq クエリーを使用します
      this.bindingSource1.DataSource = categoryView;
    }
    

このコードは、最初に、フォームのすべてのコントロールのデータソースとして機能する LiveLinq クエリーを作成します。

このクエリーは 100% 標準の LINQ クエリーです。ただし、AsLive ステートメントにより、標準の LINQ クエリーが連結に適したライブビューに変換されます。これらがないと、このコードはコンパイルもされません。

このクエリーは、join を使用して各カテゴリのすべての製品を取得し、それらを1つのグループに保存します。次に、カテゴリ ID、カテゴリ名、およびそのカテゴリに関連付けられている製品のグループを選択します。

この製品のグループは、FK_Products_Categories という名前です。これを "Products" のような単純でわかりやすい名前にしなかったのは、Visual Studio によってバックグラウンドで作成された連結コードが、この特定の名前に依存しているためです。

Form1.Designer.cs ファイルを見てみると、Visual Studio によって fKProductsCategoriesBindingSource という名前の bindingSource オブジェクトが作成されていることがわかります。このオブジェクトは次のように初期化されます。

C#
コードのコピー
//
// fKProductsCategoriesBindingSource
//
this.fKProductsCategoriesBindingSource.DataMember = "FK_Products_Categories";
this.fKProductsCategoriesBindingSource.DataSource = this.bindingSource1;

このコードは、元の連結ソースに "FK_Products_Categories" という名前のプロパティが含まれ、そこから現在のカテゴリの製品のリストが公開されることを前提とします。この連結が引き続き機能するには、今度のクエリーでも同じ名前を使用する必要があります。

ここでプロジェクトを実行すると、前回とまったく同様に機能することがわかります。ただし、今回は、すべてが LINQ クエリーによって制御されているため、高い柔軟性が得られます。LINQ ステートメントを書き直し、仕入先名、売上高の合計などの追加情報を表示することは簡単です。