DataContext.ExecuteQuery 方法

定義

多載

名稱 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的實體。

ObjectTrackingEnabledtrue

該實體有一個主金鑰。

否則會拋出例外。

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

傳回

IEnumerable<TResult>

查詢回傳的一組物件。

範例

以下範例展示了此方法的一種應用:

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 是正確的。

    • 該實體有一個主金鑰。

    否則會拋出例外。

  • 在其他情況下,查詢只能取得物件追蹤欄位和屬性的子集。

適用於