TOC

This article is currently in the process of being translated into Italian (~99% done).

LINQ:

Introduction

LINQ, abbreviazione di Language-Integrated Query, è una tecnologia costruita nel .NET framework che permette di richiedere e manipolare facilmente dati proveniente da varie fonti. In altre parole, puoi lavorare con dati nello stesso modo e non importa se la fonte è una lista, un dizionario, un fila XML o una tabella di un database. LINQ ha due sintassi: la Query e la sintassi Metodo. Approfondiremo entrambe per intero nel prossimo articolo, 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! Nel prossimo articolo, andremo a vedere tutte le fantastiche possibilità che si hanno quando si usa LINQ, ma prima, dovremmo parlare un po su 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.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!