3 pagine in totale: <<Indietro 1 2 [3]
Operatori per liste
Distinct, Union, Except, Intersect
Questi metodi effettuano il raffronto tra due liste effettuando rispettivamente:
- L'eliminazione degli oggetti uguali
- L'unione delle liste in una eliminando gli oggetti uguali
- La restituzione degli oggetti nella prima lista non presenti nella seconda
- La restituzione degli oggetti nella prima lista presenti anche nella seconda
Per verificare l'uguaglianza tra gli oggetti ci sono due modalità; la prima è fare l'override dei metodi GetHashCode e Equals nelle classi, la seconda è creare una classe che implementa IEqualityComparer<T> e passarla in input al metodo che si utilizza. Questi operatori sono stati già trattati nella rubrica XCript quindi ulteriori approfondimenti sono raggiungibili a questo indirizzo.
Operatori di aggregazione
Gli operatori di aggregazione possono fornire dati sulle aggregazioni di dati.
Average, Max, Min, Sum
Questi operatori ritornano la media, il valore massimo, quello minimo e la somma dell'espressione che viene specificata nella lambda expression passata in input.
var result = persone.Average(p => p.Eta);
var result = persone.Max(p => p.Eta);
var result = persone.Min(p => p.Eta);
var result = persone.Sum(p => p.Eta);Il risultato di questi operatori viene messo in una variabile del tipo dell'espressione valutata.
Count, LongCount
Questi operatori tornano il totale degli elementi rispettivamente come int e come long. Esistono due overload di questi metodi; uno che non accetta alcun parametro ed uno che accetta una lambda expression dove specificare una condizione. Utilizzando questo secondo overload, viene tornato il totale di oggetti che soddisfano la condizione.
Operatori di elemento
Gli operatori che fanno parte di questa categoria permettono di ritornare un elemento che si trova ad una specifica condizione.
ElementAt, First, Last, Single
Questi operatori rispettivamente ritornano:
- Un elemento ad una determinata posizione. Nel caso non ci sia un elemento nella posizione, viene sollevata un'eccezione.
- Il primo elemento. Nel caso ci siano più elementi, viene restituito solo il primo. Nel caso non ci siano elementi, viene sollevata un'eccezione.
- L'ultimo elemento. La regola per le eccezioni è la stessa per First.
- Il primo elemento. Nel caso non ci siano elementi o ci siano più elementi, viene sollevata un'eccezione.
ElementAtOrDefault, FirstOrDefault, LastOrDefault, SingleOrDefault
Questi operatori eseguono le stesse operazioni dei metodi precedenti con una grossa differenza. Nessuna eccezione viene sollevata, bensì viene restituito un oggetto dal valore default
Operatori di raggruppamento
GroupBy
L'unico operatore di questa categoria è GroupBy e permette di raggruppare gli oggetti in base ad una chiave specificata. La chiave può essere un qualunque oggetto: una stringa, un intero, una classe, ecc ecc.
var result = persone.GroupBy(p => p.Eta);Il risultato di questa query è un oggetto IEnumerable<IGrouping<int, Persona>>; in altre parole è una lista di oggetti che hanno una proprietà di tipo int che rappresenta la chiave, ovvero l'età della persona, ed una proprietà di tipo IEnumerable che rappresenta tutte le persone che appartengono a quell'età. Per scorrere la lista si può ricorrere al seguente codice:
foreach (var item in result)
{
Console.WriteLine(item.Key);
foreach (var el in item)
Console.WriteLine(el.Nome + " " + el.Cognome);
}Uno degli overload di questo metodo permette di specificare l'oggetto da inserire nella lista associata alla chiave.
var result = persone.GroupBy(p => p.Eta, p => p.Nome + " " + p.Cognome);
foreach (var item in result)
{
Console.WriteLine(item.Key);
foreach (var el in item)
Console.WriteLine(el);
}Operatori di conversione
ToArray, ToList, AsEnumerable
Questi operatori trasformano la lista a cui vengono applicati ad un'istanza rispettivamente di tipo List<T>, T[], IEnumerable<T>.
Cast
L'operatore Cast converte la lista a cui viene applicato in una lista di tipo List<T>. La differenza dal metodo ToList è che è che in questo caso il tipo è specificato nel metodo mentre in ToList viene ricavato automaticamente dal compilatore.
var result = Controls.Cast<Control>();Conclusioni
LINQ offre immense possibilità quando si tratta di eseguire query. Ciò che prima richiedeva diversi cicli e righe di codice, adesso può essere ottenuto con una semplicità spesso addirittura disarmante. Se si pensa soprattutto agli operatori di raggruppamento, proiezione (in particolare SelectMany) ed aggregazione ci si rende conto che la quantità di codice diminuisce sensibilmente e la sua qualità aumenta nello stesso momento.
3 pagine in totale: <<Indietro 1 2 [3]
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download 



