DataContext.ExecuteQuery 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
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> 型別。
查詢結果中的資料行與物件中的欄位或屬性相符合的演算法用法如下:
如果欄位或屬性已對應至特定資料行名稱,結果集 (Resultset) 必須包含該資料行名稱。
如果欄位或屬性未對應,結果集必須包含與該欄位或屬性同名的資料行。
尋找區分大小寫的相符項時會先進行比較。 如果找不到這種相符項,就會繼續搜尋不區分大小寫的相符項。
當下列所有條件皆為 true 時,查詢必須傳回該物件所有追蹤的欄位和屬性 (會延後載入的欄位和屬性除外):
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[]
要傳遞至命令的參數陣列。 請注意下列情況:
如果陣列中的物件數目少於命令字串中所識別的最高數目,便會擲回例外狀況。
如果陣列包含命令字串中未參考的物件,則不會擲回任何例外狀況。
如果參數為 null,則會轉換成 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 to SQL 未針對特定案例提供的情況。
將查詢結果中的數據行比對物件中欄位和屬性的演演算法運作方式如下:
如果欄位或屬性已對應至特定資料行名稱,結果集 (Resultset) 必須包含該資料行名稱。
如果欄位或屬性未對應,結果集必須包含與該欄位或屬性同名的資料行。
比較是先尋找區分大小寫的相符項目來執行。 如果找不到這類相符專案,後續會搜尋不區分大小寫的相符專案。
除了受延後載入的物件以外,查詢必須傳回物件的所有追蹤欄位和屬性 (,且下列所有專案都成立時) :
如果
<T>
是由明確追蹤的 DataContext實體。ObjectTrackingEnabled 為 true。
這個實體具有主索引鍵。
否則,會擲回例外狀況。
在其他所有情況下,查詢只能擷取對象的追蹤欄位和屬性子集。