HOW TO:直接執行 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 類別的資料分佈於兩張資料表 (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"
);
只要表格式結果中的資料行名稱符合實體 (Entity) 類別的資料行屬性,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))。