Condividi tramite


DataContext.ExecuteQuery Metodo

Definizione

Overload

ExecuteQuery(Type, String, Object[])

Esegue query SQL direttamente nel database.

ExecuteQuery<TResult>(String, Object[])

Esegue query SQL direttamente nel database e restituisce oggetti.

ExecuteQuery(Type, String, Object[])

Esegue query SQL direttamente nel database.

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

Parametri

elementType
Type

Tipo di IEnumerable<T> da restituire.

L'algoritmo per eseguire la corrispondenza tra le colonne nel risultato della query e i campi o le proprietà nell'oggetto funziona nel modo seguente:

Se un campo o una proprietà viene mappata a un determinato nome di colonna, nel set di risultati è previsto tale nome.

Se non viene mappato un campo o una proprietà, nel set di risultati è prevista una colonna con lo stesso nome del campo o della proprietà.

Il confronto viene eseguito cercando prima una corrispondenza con distinzione tra maiuscole e minuscole. Se tale corrispondenza non viene trovata, viene eseguita una ricerca successiva di una corrispondenza senza distinzione tra maiuscole e minuscole.

La query deve restituire tutti i campi e le proprietà registrati dell'oggetto (tranne quelli caricati su base posticipata) se si verificano le condizioni seguenti:

T è un'entità rilevata in modo esplicito da DataContext.

ObjectTrackingEnabled è true.

L'entità contiene una chiave primaria.

In caso contrario, viene generata un'eccezione.

query
String

Query SQL da eseguire.

parameters
Object[]

Matrice di parametri da passare al comando. Tenere presente quanto segue:

Se il numero di oggetti nella matrice è inferiore al numero più elevato identificato nella stringa di comando, viene generata un'eccezione.

Se la matrice contiene oggetti ai quali non viene fatto riferimento nella stringa di comando, non viene generata alcuna eccezione.

Se un parametro è null, viene convertito in DBNull.Value.

Restituisce

Insieme di oggetti IEnumerable<T> restituiti dalla query.

Si applica a

ExecuteQuery<TResult>(String, Object[])

Esegue query SQL direttamente nel database e restituisce oggetti.

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)

Parametri di tipo

TResult

Tipo di elementi contenuti nell'insieme restituito.

Parametri

query
String

Query SQL da eseguire.

parameters
Object[]

Matrice di parametri da passare al comando. Tenere presente quanto segue:

Se il numero di oggetti nella matrice è inferiore al numero più elevato identificato nella stringa di comando, viene generata un'eccezione.

Se la matrice contiene oggetti ai quali non viene fatto riferimento nella stringa di comando, non viene generata alcuna eccezione.

Se un parametro è null, viene convertito in DBNull.Value.

Restituisce

IEnumerable<TResult>

Insieme di oggetti restituiti dalla query.

Esempio

Nell'esempio seguente viene illustrato un utilizzo per questo metodo:

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

Commenti

Questo metodo è un meccanismo pass-through per i casi in cui LINQ to SQL non fornisce per uno scenario specifico.

L'algoritmo per la corrispondenza delle colonne nel risultato della query a campi e proprietà nell'oggetto funziona come segue:

  • Se un campo o una proprietà viene mappata a un determinato nome di colonna, nel set di risultati è previsto tale nome.

  • Se non viene mappato un campo o una proprietà, nel set di risultati è prevista una colonna con lo stesso nome del campo o della proprietà.

  • Il confronto viene eseguito cercando prima una corrispondenza con distinzione tra maiuscole e minuscole. Se tale corrispondenza non viene trovata, viene eseguita una ricerca successiva per una corrispondenza senza distinzione tra maiuscole e minuscole.

  • La query deve restituire tutti i campi e le proprietà rilevati dell'oggetto ( a parte quelli soggetti al caricamento posticipato) quando sono vere tutte le condizioni seguenti:

    • Se <T> è un'entità rilevata in modo esplicito da DataContext.

    • ObjectTrackingEnabled è true.

    • L'entità contiene una chiave primaria.

    In caso contrario, viene generata un'eccezione.

  • In tutti gli altri casi, la query può recuperare solo un subset dei campi e delle proprietà rilevati per l'oggetto.

Si applica a