チュートリアル: 単純なオブジェクト モデルとクエリ (C#)

このチュートリアルでは、複雑さを最小限に抑えた基本的なエンド ツー エンドの LINQ to SQL シナリオを提供します。 サンプル Northwind データベースの Customers テーブルをモデル化するエンティティ クラスを作成します。 次に、ロンドンにいる顧客を一覧表示する簡単なクエリを作成します。

このチュートリアルは、LINQ to SQL の概念を示すのに役立つコード指向の設計です。 通常、オブジェクト リレーショナル デザイナーを使用してオブジェクト モデルを作成します。

注

次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。

このチュートリアルは、Visual C# 開発設定を使用して作成されました。

[前提条件]

  • このチュートリアルでは、専用フォルダー ("c:\linqtest5") を使用してファイルを保持します。 チュートリアルを開始する前に、このフォルダーを作成します。

  • このチュートリアルでは、Northwind サンプル データベースが必要です。 開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードできます。 手順については、「 サンプル データベースのダウンロード」を参照してください。 データベースをダウンロードしたら、ファイルを c:\linqtest5 フォルダーにコピーします。

概要

このチュートリアルは、次の 6 つの主要なタスクで構成されています。

  • Visual Studio での LINQ to SQL ソリューションの作成。

  • クラスをデータベース テーブルにマッピングします。

  • データベース列を表すクラスのプロパティを指定します。

  • Northwind データベースへの接続を指定します。

  • データベースに対して実行する単純なクエリを作成する。

  • クエリの実行と結果の監視。

LINQ to SQL ソリューションの作成

この最初のタスクでは、LINQ to SQL プロジェクトをビルドして実行するために必要な参照を含む Visual Studio ソリューションを作成します。

LINQ to SQL ソリューションを作成するには

  1. Visual Studio の [ ファイル ] メニューの [ 新規作成] をポイントし、[ プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ウィンドウで、[Visual C#] をクリックします。

  3. [テンプレート] ウィンドウ で 、[ コンソール アプリケーション] をクリックします。

  4. [ 名前 ] ボックスに「 LinqConsoleApp」と入力します。

  5. [ 場所 ] ボックスで、プロジェクト ファイルを格納する場所を確認します。

  6. OK をクリックします。

LINQ 参照とディレクティブの追加

このチュートリアルでは、プロジェクトに既定ではインストールされないアセンブリを使用します。 System.Data.Linq がプロジェクトの参照としてリストされていない場合 (ソリューション エクスプローラーで [参照] ノードを展開)、次の手順で説明するように追加します。

System.Data.Linq を追加するには

  1. ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。

  2. [ 参照の追加 ] ダイアログ ボックスで、[ .NET] をクリックし、[System.Data.Linq] アセンブリをクリックして、[ OK] をクリックします。

    アセンブリがプロジェクトに追加されます。

  3. Program.csの先頭に次のディレクティブを追加します。

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

データベース テーブルへのクラスのマッピング

この手順では、クラスを作成し、データベース テーブルにマップします。 このようなクラスは エンティティ クラスと呼ばれる。 マッピングは、 TableAttribute 属性を追加するだけで実現されることに注意してください。 Name プロパティは、データベース内のテーブルの名前を指定します。

エンティティ クラスを作成してデータベース テーブルにマップするには

  • 次のコードを入力するか、 Program クラス宣言のすぐ上のProgram.csに貼り付けます。

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

データベース列を表すクラスのプロパティの指定

この手順では、いくつかのタスクを実行します。

  • ColumnAttribute属性を使用して、エンティティ クラスのCustomerIDプロパティとCityプロパティをデータベース テーブル内の列を表すように指定します。

  • CustomerID プロパティは、データベースの主キー列を表すものとして指定します。

  • プライベート ストレージの _CustomerID フィールドと _City フィールドを指定します。 LINQ to SQL では、ビジネス ロジックを含むパブリック アクセサーを使用する代わりに、値を直接格納および取得できます。

2 つのデータベース列の特性を表すには

  • 次のコードを入力するか、 Customer クラスの中かっこ内のProgram.csに貼り付けます。

    private string _CustomerID;
    [Column(IsPrimaryKey=true, Storage="_CustomerID")]
    public string CustomerID
    {
        get
        {
            return this._CustomerID;
        }
        set
        {
            this._CustomerID = value;
        }
    }
    
    private string _City;
    [Column(Storage="_City")]
    public string City
    {
        get
        {
            return this._City;
        }
        set
        {
            this._City=value;
        }
    }
    

Northwind データベースへの接続の指定

この手順では、 DataContext オブジェクトを使用して、コード ベースのデータ構造とデータベース自体の間の接続を確立します。 DataContextは、データベースからオブジェクトを取得して変更を送信するメイン チャネルです。

また、データベース内の Customers テーブルに対するクエリの論理型指定されたテーブルとして機能する Table<Customer> を宣言します。 これらのクエリは、後の手順で作成して実行します。

データベース接続を指定するには

  • 次のコードを入力するか、 Main メソッドに貼り付けます。

    northwnd.mdf ファイルは linqtest5 フォルダーにあると見なされることに注意してください。 詳細については、このチュートリアルの前の「前提条件」セクションを参照してください。

    // Use a connection string.
    DataContext db = new DataContext
        (@"c:\linqtest5\northwnd.mdf");
    
    // Get a typed table to run queries.
    Table<Customer> Customers = db.GetTable<Customer>();
    

単純なクエリの作成

この手順では、データベース Customers テーブルのどの顧客がロンドンにあるかを検索するクエリを作成します。 この手順のクエリ コードでは、クエリについて説明するだけです。 実行は行いません。 このアプローチは 、遅延実行と呼ばれます。 詳細については、「 LINQ クエリの概要 (C#)」を参照してください。

また、LINQ to SQL によって生成される SQL コマンドを表示するログ出力も生成します。 このログ機能 ( Logを使用) は、デバッグに役立ち、データベースに送信されるコマンドがクエリを正確に表すかどうかを判断するのに役立ちます。

単純なクエリを作成するには

  • Main宣言の後に、次のコードを入力するか、Table<Customer> メソッドに貼り付けます。

    // Attach the log to show generated SQL.
    db.Log = Console.Out;
    
    // Query for customers in London.
    IQueryable<Customer> custQuery =
        from cust in Customers
        where cust.City == "London"
        select cust;
    

クエリの実行

この手順では、実際にクエリを実行します。 前の手順で作成したクエリ式は、結果が必要になるまで評価されません。 foreachイテレーションを開始すると、データベースに対して SQL コマンドが実行され、オブジェクトが具体化されます。

クエリを実行するには

  1. Main メソッドの末尾 (クエリの説明の後) に次のコードを入力するか貼り付けます。

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. F5 キーを押してアプリケーションをデバッグします。

    注

    アプリケーションでランタイム エラーが発生する場合は、「 チュートリアルによる学習」の「トラブルシューティング」セクションを参照してください。

    コンソール ウィンドウのクエリ結果は次のように表示されます。

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

  3. コンソール ウィンドウで Enter キーを押して、アプリケーションを閉じます。

次のステップ

チュートリアル: リレーションシップ間のクエリ (C#) トピックは、このチュートリアルの最後の場所で続行されます。 リレーションシップ間のクエリチュートリアルでは、リレーショナル データベースの 結合 と同様に、LINQ to SQL がテーブル間でクエリを実行する方法を示します。

リレーションシップ間のクエリチュートリアルを実行する場合は、完了したチュートリアルのソリューションを必ず保存してください。これは前提条件です。

こちらも参照ください