DataContext.ExecuteQuery 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| ExecuteQuery(Type, String, Object[]) |
直接在資料庫上執行 SQL 查詢。 |
| ExecuteQuery<TResult>(String, Object[]) |
直接對資料庫執行 SQL 查詢並回傳物件。 |
ExecuteQuery(Type, String, Object[])
直接在資料庫上執行 SQL 查詢。
public:
System::Collections::IEnumerable ^ ExecuteQuery(Type ^ elementType, System::String ^ query, ... cli::array <System::Object ^> ^ parameters);
public System.Collections.IEnumerable ExecuteQuery(Type elementType, string query, params object[] parameters);
member this.ExecuteQuery : Type * string * obj[] -> System.Collections.IEnumerable
Public Function ExecuteQuery (elementType As Type, query As String, ParamArray parameters As Object()) As IEnumerable
參數
- elementType
- Type
要退回的類型 IEnumerable<T> 。
查詢結果中欄位與物件欄位或屬性的匹配演算法運作方式如下:
如果欄位或屬性被映射到特定欄位名稱,該欄位名稱會預期出現在結果集中。
若欄位或屬性未映射,結果集中預期會有一欄與該欄位或屬性同名。
比較是先尋找一個大寫敏感的匹配。 若未找到此匹配,則會進行後續搜尋大小寫不相關的匹配。
當以下條件皆成立時,查詢必須回傳所有追蹤的欄位與物件屬性(不包括以延遲載入的欄位):
T 是一個被明確追蹤 DataContext的實體。
ObjectTrackingEnabled 是 true。
該實體有一個主金鑰。
否則會拋出例外。
- query
- String
要執行的 SQL 查詢。
- parameters
- Object[]
要傳遞給指令的參數陣列。 注意以下行為:
如果陣列中的物件數量少於指令字串中識別的最高數值,則會拋出例外。
如果陣列中包含未在指令字串中被引用的物件,則不會拋出例外。
若參數為 null,則轉換為 DBNull.Value。
傳回
一 IEnumerable<T> 組由查詢回傳的物件。
適用於
ExecuteQuery<TResult>(String, Object[])
直接對資料庫執行 SQL 查詢並回傳物件。
public:
generic <typename TResult>
System::Collections::Generic::IEnumerable<TResult> ^ ExecuteQuery(System::String ^ query, ... cli::array <System::Object ^> ^ parameters);
public System.Collections.Generic.IEnumerable<TResult> ExecuteQuery<TResult>(string query, params object[] parameters);
member this.ExecuteQuery : string * obj[] -> seq<'Result>
Public Function ExecuteQuery(Of TResult) (query As String, ParamArray parameters As Object()) As IEnumerable(Of TResult)
類型參數
- TResult
回傳集合中元素的類型。
參數
- query
- String
要執行的 SQL 查詢。
- parameters
- Object[]
要傳遞給指令的參數陣列。 注意以下行為:
如果陣列中的物件數量少於指令字串中識別的最高數值,則會拋出例外。
如果陣列中包含未在指令字串中被引用的物件,則不會拋出例外。
若參數為空,則轉換為 DBNull.Value。
傳回
查詢回傳的一組物件。
範例
以下範例展示了此方法的一種應用:
var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName, ContactTitle,
Address, City, Region, PostalCode, Country, Phone, Fax
FROM dbo.Customers
WHERE City = {0}", "London");
foreach (Customer c in customers)
Console.WriteLine(c.ContactName);
Dim customers = db.ExecuteQuery(Of Customer)("SELECT CustomerID, _
CompanyName, ContactName, ContactTitle, _
Address, City, Region, PostalCode, Country, Phone, Fax _
FROM dbo.Customers _
WHERE City = {0}", "London")
For Each c As Customer In customers
Console.WriteLine(c.ContactName)
Next
備註
此方法是一種通過機制,適用於 LINQ 轉 SQL 無法滿足特定情境的情況。
查詢結果中欄位與物件欄位及屬性匹配的演算法運作方式如下:
如果欄位或屬性被映射到特定欄位名稱,該欄位名稱會預期出現在結果集中。
若欄位或屬性未映射,結果集中預期會有一欄與該欄位或屬性同名。
比較方法是先尋找一個大寫相關的匹配。 若未找到此類匹配,則會進行後續搜尋大小寫不區分的匹配。
當以下條件全部成立時,查詢必須回傳物件所有已追蹤的欄位與屬性(不含受延遲載入的欄位):
若
<T>是被 DataContext明確追蹤的實體。ObjectTrackingEnabled 是正確的。
該實體有一個主金鑰。
否則會拋出例外。
在其他情況下,查詢只能取得物件追蹤欄位和屬性的子集。