次の方法で共有


方法 : SQL クエリを直接実行する (LINQ to SQL)

更新 : November 2007

LINQ to SQL は、作成したクエリをパラメータ化された SQL クエリ (テキスト形式) に変換し、それを SQL Server に送って処理します。

アプリケーションでローカルに使用できるさまざまなメソッドの中には、SQL では実行できないものもあります。LINQ to SQL は、このようなローカル メソッドを、SQL 環境内で使用できる同等の操作や関数に変換しようとします。.NET Framework 組み込み型のほとんどのメソッドと演算子には、SQL コマンドに直接対応する変換が用意されています。使用可能な関数から生成できるものもあります。生成できないものについては、ランタイム例外が発生します。詳細については、「SQL と CLR の型マッピング (LINQ to SQL)」を参照してください。

特殊なタスクに対して LINQ to SQL クエリでは不十分な場合は、ExecuteQuery メソッドを使用して SQL クエリを実行し、そのクエリの結果をオブジェクトに直接変換できます。

使用例

次の例では、Customer クラスのデータが 2 つのテーブル (customer1 および customer2) にわたって格納されているものとします。クエリは Customer オブジェクトのシーケンスを返します。

Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
    db.ExecuteQuery(Of Customer) _
    ("SELECT c1.custID as CustomerID," & _
    "c2.custName as ContactName" & _
    "FROM customer1 AS c1, customer2 as c2" & _
    "WHERE c1.custid = c2.custid")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
(@"SELECT c1.custid as CustomerID, c2.custName as ContactName
    FROM customer1 as c1, customer2 as c2
    WHERE c1.custid = c2.custid"
);

表形式の結果の列名がエンティティ クラスの列のプロパティと一致する限り、LINQ to SQL は SQL クエリからオブジェクトを作成します。

ExecuteQuery メソッドは、パラメータの使用にも対応しています。パラメータ化されたクエリを実行するには、次のようなコードを使用します。

    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT contactname FROM customers WHERE city = {0}, 'London'")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customers WHERE city = {0}",
    "London");

クエリ テキスト内では、Console.WriteLine() および String.Format() で使用するのと同じ中かっこ表記を使用して、パラメータを表現します。実際には、指定したクエリ文字列について String.Format() が呼び出され、中かっこで囲まれたパラメータは、生成された @p0、@p1、...、@p(n) のようなパラメータ名に置き換えられます。

参照

その他の技術情報

背景情報 (LINQ to SQL)

データベースに対してクエリを実行する (LINQ to SQL)