Molte cose in LINQ possono essere eseguite senza la libreria. Ma per alcuni scenari, LINQ è il più appropriato.
Gli esempi sono:
Quali fattori prendere in considerazione quando si decide tra LINQ e elementi di linguaggio .Net regolari?
Ho trovato LINQ utile in tutti gli scenari in cui sto lavorando con raccolte di oggetti. Le cose principali che fai con le collezioni di oggetti sono:
Ciascuno di questi scenari ha un numero di metodi LINQ progettati per aiutare con l'attività:
Where()
, First()
, Any()
, All()
, Last()
Aggregate()
, Average()
Sum()
, Max()
, Min()
Select()
e SelectMany()
OrderBy()
, GroupBy()
, Reverse()
E qualche altra strana e ultima che non sono sicuro di come classificare in quanto sopra per - per esempio le operazioni di set Union()
e Intersect()
.
In generale, tutte queste funzioni svolgono il lavoro di loop codificati a mano, ma hanno il vantaggio di migliorare la leggibilità perché aiutano a sostituire diverse righe di codice con alcune operazioni LINQ che prendono il nome da ciò che fanno. Ad esempio, considera
string[] input;
var output = new string[input.Length];
for(int i = 0; i < input.Length; i++)
{
output[input.Length - i - 1] = input[i];
}
vs
var output = input.Reverse().ToArray();
Un altro vantaggio è che è facile metterli insieme per ottenere un comportamento più complesso. Diciamo che invece si desidera ottenere solo i valori univoci nell'array e ordinarli. In questo momento mi sento troppo pigro per codificare a mano una soluzione, ma sono sicuro che qualunque cosa sia sarebbe molto più lunga e difficile da leggere di
var output = input.Distinct().OrderBy(x=>x).ToArray();
E sicuramente impiegherebbe più tempo, motivo per cui non ho voglia di scriverlo.
Esistono diversi tipi di tecnologie che rientrano nel LINQ :
E ce ne sono altri forniti da altri, come LINQ-to-CSV , LINQ- to-NHibernate , ecc.
In ognuno di questi casi, lo scopo di LINQ è lo stesso: interrogare insiemi di dati. Quindi ogni volta che si ha una sorta di set (0, 1 o più elementi) di un particolare tipo di dati, LINQ è una soluzione succinta per affrontarlo. Molte domande sembrano sorgere sul fatto che funzioni meglio di un approccio scritto a mano, ma non è questo il punto. LINQ specifica intent piuttosto che implementazione .