This article has been localized into Italian by the community.
Introduzione
LINQ, abbreviazione di Language-Integrated Query, è una tecnologia incorporata nel framework .NET, che permette di selezionare e manipolare facilmente dati provenienti da varie fonti. In altre parole, si può lavorare con i dati nello stesso modo, indipendentemente che la fonte sia una lista, un dizionario, un file XML o una tabella di database. LINQ ha due sintassi: la sintassi Query e la sintassi Metodo. Approfondiremo entrambe per intero nel prossimo articolo, ma per il momento ecco una veloce dimostrazione su quanto è elegante LINQ nel richiedere dati da una semplice fonte di dati:
var names = new List<string>()
{
"John Doe",
"Jane Doe",
"Jenna Doe",
"Joe Doe"
};
// Get the names which are 8 characters or less, using LINQ
var shortNames = from name in names where name.Length <= 8 orderby name.Length select name;
foreach (var name in shortNames)
Console.WriteLine(name);
In una sola riga, usando la sintassi query di LINQ possiamo richiedere tutti i nomi nella lista che possiedono 8 o meno caratteri ed averli ordinati per il numero di caratteri! Questa è solamente UNA linea di codice e dimostra solo una piccola parte di cosa è capace LINQ! Nei prossimi articoli, andremo a vedere tutte le fantastiche possibilità che si hanno quando si usa LINQ, ma prima, dovremmo parlare un po' di come e quando una richiesta LINQ viene eseguita.
Esecuzione differita
La maggior parte dei programmatori è abituata a vedere l'esecuzione del codice riga dopo riga, quindi potrebbe sorprenderti che una query LINQ non venga eseguita non appena viene raggiunta la riga con la parte della query. Invece, LINQ viene eseguito non appena inizi a utilizzare i dati, ad esempio quando si scorre su di esso o si chiama un metodo come ToList () o Count (). Ciò significa anche che è possibile creare una query su più righe, in cui si eseguono più operazioni, ma i dati non vengono effettivamente recuperati fino a quando non sono necessari. Consentitemi di illustrare con una versione estesa del nostro esempio precedente, in cui passiamo alla sintassi del metodo anziché alla sintassi della query precedente:
var names = new List<string>()
{
"John Doe",
"Jane Doe",
"Jenna Doe",
"Joe Doe"
};
// Get the names which are 8 characters or less, using LINQ
var shortNames = names.Where(name => name.Length <= 8);
// Order it by length
shortNames = shortNames.OrderBy(name => name.Length);
// Add a name to the original list
names.Add("Zoe Doe");
// Iterate over it - the query has not actually been executed yet!
// It will be as soon as we hit the foreach loop though!
foreach (var name in shortNames)
Console.WriteLine(name);
Ho aggiunto alcuni commenti al codice, quindi dovrebbe essere facile da seguire. Inoltre, nota che ho aggiunto un po 'di prove: dopo aver eseguito la query, aggiungo un nome all'elenco originale. Ora, se la query fosse già stata eseguita, questo ovviamente non lo farebbe nel risultato, ma lo fa, perché viene aggiunto dopo la query ma PRIMA di utilizzare effettivamente i dati, che si verificano nel ciclo foreach.
Questo non è di grande importanza quando si esegue una query su un elenco con 4 o 5 nomi, ma immagina invece se avessimo avuto un elenco di 10 milioni di voci o forse un database remoto da qualche parte. In tal caso, è molto importante che non eseguiamo più query quando possiamo semplicemente eseguire una query.
Sommario
LINQ ti consente di interrogare in modo semplice e nativo varie origini dati utilizzando la stessa sintassi, ovvero la sintassi della query o la sintassi del metodo, di cui parleremo nel prossimo articolo.