方法: 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) のようなパラメーター名に置き換えられます。