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)。