DataContext.ExecuteQuery 方法

定義

多載

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實體。

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[]

要傳遞至命令的參數陣列。 請注意下列情況:

如果陣列中的物件數目少於命令字串中所識別的最高數目,便會擲回例外狀況。

如果陣列包含命令字串中未參考的物件,則不會擲回任何例外狀況。

如果參數為 null,則會轉換成 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 to SQL 未針對特定案例提供的情況。

將查詢結果中的數據行比對物件中欄位和屬性的演演算法運作方式如下:

  • 如果欄位或屬性已對應至特定資料行名稱,結果集 (Resultset) 必須包含該資料行名稱。

  • 如果欄位或屬性未對應,結果集必須包含與該欄位或屬性同名的資料行。

  • 比較是先尋找區分大小寫的相符項目來執行。 如果找不到這類相符專案,後續會搜尋不區分大小寫的相符專案。

  • 除了受延後載入的物件以外,查詢必須傳回物件的所有追蹤欄位和屬性 (,且下列所有專案都成立時) :

    • 如果 <T> 是由明確追蹤的 DataContext實體。

    • ObjectTrackingEnabled 為 true。

    • 這個實體具有主索引鍵。

    否則,會擲回例外狀況。

  • 在其他所有情況下,查詢只能擷取對象的追蹤欄位和屬性子集。

適用於