次の方法で共有


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

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)