方法: SQL クエリを直接実行する

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

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

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

例 1

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

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"
);
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")

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

例 2

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

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customers WHERE city = {0}",
    "London");
    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'")

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

関連項目