Condividi tramite


Query in LINQ to Entities

Una query è un'espressione che recupera dati da un'origine dati. Le query sono in genere espresse in un linguaggio di query specializzato, ad esempio SQL per i database relazionali e XQuery per XML. Gli sviluppatori hanno dovuto pertanto imparare un nuovo linguaggio di query per ogni tipo di origine dati o formato dati usato per le query. LINQ (Language-Integrated Query) offre un modello più semplice e coerente per l'uso di dati in diversi tipi di origini dati e formati di dati. In una query LINQ vengono sempre usati oggetti di programmazione.

Un'operazione di query LINQ comporta tre azioni: il recupero di una o più origini dati, la creazione della query e l'esecuzione della query.

È possibile usare LINQ per eseguire query su origini dati che implementano l'interfaccia generica IEnumerable<T> o IQueryable<T>. Le istanze della classe generica ObjectQuery<T>, che implementa l'interfaccia generica IQueryable<T>, fungono da origine dati per le query LINQ to Entities. La classe generica ObjectQuery<T> rappresenta una query che restituisce una raccolta di zero o più oggetti tipizzati. È anche possibile consentire al compilatore di dedurre il tipo di un'entità tramite la parola chiave var di C# (Dim in Visual Basic).

Nella query è necessario specificare esattamente le informazioni che si desidera recuperare dall'origine dati. Una query può inoltre specificare in che modo ordinare, raggruppare e formattare le informazioni prima che vengano restituite. In LINQ una query viene archiviata in una variabile. Se la query restituisce una sequenza di valori, la variabile di query deve essere un tipo queryable. La variabile di query non esegue azioni né restituisce dati. Viene solo usata per archiviare le informazioni sulla query. Dopo aver creato una query è necessario eseguirla per recuperare eventuali dati.

Sintassi delle query

Le query LINQ to Entities possono essere composte in due sintassi diverse, ovvero la sintassi delle espressioni di query e la sintassi delle query basate su metodo. La sintassi delle espressioni di query è una novità di C# 3.0 e Visual Basic 9.0 e consiste in un set di clausole scritte in una sintassi dichiarativa simile a Transact-SQL o a XQuery. Tuttavia, il Common Language Runtime (CLR) di .NET Framework non è in grado di leggere da solo la sintassi delle espressioni di query. Pertanto, in fase di compilazione, le espressioni di query vengono convertite in chiamate al metodo in modo da poter essere usate da CLR. Questi metodi sono noti come operatori query standard. Gli sviluppatori possono scegliere di chiamare direttamente questi metodi usando la relativa sintassi, anziché usare la sintassi delle query. Per altre informazioni, vedere Sintassi di query e sintassi di metodi in LINQ.

Sintassi delle espressioni di query

Le espressioni di query vengono scritte in una sintassi di query dichiarativa. Questa sintassi consente a uno sviluppatore di scrivere query in un linguaggio di alto livello formattato in modo simile a Transact-SQL. Tramite la sintassi delle espressioni di query è possibile eseguire anche complesse operazioni di filtro, ordinamento e raggruppamento sulle origini dati usando una quantità minima di codice. Per altre informazioni, vedere Operazioni di query di base (Visual Basic). Per esempi che illustrano come usare la sintassi delle espressioni di query, vedere gli argomenti seguenti:

Sintassi delle query basate su metodo

Per comporre query LINQ to Entities, è inoltre possibile usare query basate su metodo. La sintassi delle query basate su metodo è costituita da una sequenza di chiamate dirette ai metodi dell'operatore LINQ, in cui come parametri vengono passate espressioni lambda. Per altre informazioni, vedere Espressioni lambda. Per esempi che illustrano come usare la sintassi delle query basate su metodo, consultare gli argomenti seguenti:

Vedi anche