DataContext.ExecuteQuery Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
ExecuteQuery(Type, String, Object[]) |
Provádí dotazy SQL přímo v databázi. |
ExecuteQuery<TResult>(String, Object[]) |
Provádí dotazy SQL přímo v databázi a vrací objekty. |
ExecuteQuery(Type, String, Object[])
Provádí dotazy SQL přímo v databázi.
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
Parametry
- elementType
- Type
Typ, který IEnumerable<T> se má vrátit.
Algoritmus pro porovnávání sloupců ve výsledku dotazu s poli nebo vlastnostmi v objektu funguje takto:
Pokud je pole nebo vlastnost namapovaná na konkrétní název sloupce, očekává se tento název sloupce v sadě výsledků.
Pokud pole nebo vlastnost nejsou namapovány, očekává se v sadě výsledků sloupec se stejným názvem jako pole nebo vlastnost.
Porovnání se provádí tak, že se nejprve hledá shoda s rozlišováním velkých a malých písmen. Pokud se tato shoda nenajde, provede se následné hledání shody, která nerozlišuje malá a velká písmena.
Dotaz musí vrátit všechna sledované pole a vlastnosti objektu (s výjimkou těch, které jsou načteny odloženě), pokud jsou splněny všechny následující podmínky:
T
je entita, kterou DataContextexplicitně sleduje .
ObjectTrackingEnabled je true
.
Entita má primární klíč.
V opačném případě dojde k výjimce.
- query
- String
Dotaz SQL, který se má spustit.
- parameters
- Object[]
Pole parametrů, které mají být předány příkazu. Všimněte si následujícího chování:
Pokud je počet objektů v poli menší než nejvyšší číslo identifikované v příkazovém řetězci, vyvolá se výjimka.
Pokud pole obsahuje objekty, na které se v příkazovém řetězci neodkazuje, nevyvolá se žádná výjimka.
Pokud je null
parametr , převede se na DBNull.Value
.
Návraty
Kolekce IEnumerable<T> objektů vrácených dotazem.
Platí pro
ExecuteQuery<TResult>(String, Object[])
Provádí dotazy SQL přímo v databázi a vrací objekty.
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)
Parametry typu
- TResult
Typ prvků ve vrácené kolekci.
Parametry
- query
- String
Dotaz SQL, který se má spustit.
- parameters
- Object[]
Pole parametrů, které mají být předány příkazu. Všimněte si následujícího chování:
Pokud je počet objektů v poli menší než nejvyšší číslo identifikované v příkazovém řetězci, vyvolá se výjimka.
Pokud pole obsahuje objekty, na které se v příkazovém řetězci neodkazuje, nevyvolá se žádná výjimka.
Pokud má parametr hodnotu null, převede se na DBNull.Value
.
Návraty
Kolekce objektů vrácených dotazem.
Příklady
Následující příklad ukazuje jedno použití pro tuto metodu:
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
Poznámky
Tato metoda je předávací mechanismus pro případy, kdy LINQ to SQL neposkytuje konkrétní scénář.
Algoritmus pro porovnávání sloupců ve výsledku dotazu s poli a vlastnostmi v objektu funguje takto:
Pokud je pole nebo vlastnost namapovaná na konkrétní název sloupce, očekává se tento název sloupce v sadě výsledků.
Pokud pole nebo vlastnost nejsou namapovány, očekává se v sadě výsledků sloupec se stejným názvem jako pole nebo vlastnost.
Porovnání se provede tak, že se nejprve vyhledá shoda s rozlišováním velkých a malých písmen. Pokud se taková shoda nenajde, provede se následné hledání shody, která nerozlišuje velká a malá písmena.
Dotaz musí vrátit všechna sledované pole a vlastnosti objektu (kromě těch, na které se vztahuje odložené načtení), pokud jsou splněny všechny následující podmínky:
Pokud
<T>
je entita explicitně sledována objektem DataContext.ObjectTrackingEnabled má hodnotu true.
Entita má primární klíč.
V opačném případě dojde k výjimce.
Ve všech ostatních případech může dotaz načíst pouze podmnožinu sledovaných polí a vlastností objektu.