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