共用方式為


如何:直接執行 SQL 查詢

LINQ 轉成 SQL 會將你寫的查詢轉換成參數化的 SQL 查詢(以文字形式),並送回 SQL 伺服器進行處理。

SQL 無法執行你應用程式本地可用的多種方法。 LINQ 轉 SQL 嘗試將這些本地方法轉換為 SQL 環境中可用的等效操作與函式。 .NET Framework 內建類型中的大多數方法與運算子都能直接轉換成 SQL 指令。 有些函數可以由現有函數產生。 無法產生的例外會產生執行時例外。 欲了解更多資訊,請參閱 SQL-CLR 類型映射

如果 LINQ 轉 SQL 查詢無法滿足特定任務,你可以用該 ExecuteQuery 方法執行 SQL 查詢,然後直接將查詢結果轉換成物件。

範例 1

在以下範例中,假設該 Customer 類別的資料分布在兩個資料表(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 轉 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)。

另請參閱