Come faccio a dire ai casi quando vale la pena usare LINQ?

-2

Molte cose in LINQ possono essere eseguite senza la libreria. Ma per alcuni scenari, LINQ è il più appropriato.

Gli esempi sono:

  1. SELECT - link
  2. SelectMany , Contains - link
  3. Enumerable.Range - link
  4. WHERE link

Quali fattori prendere in considerazione quando si decide tra LINQ e elementi di linguaggio .Net regolari?

    
posta Lijo 02.08.2012 - 17:29
fonte

2 risposte

6

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:

  • cercali per gli elementi corrispondenti ad alcune caratteristiche
  • Attraversali per calcolare un valore aggregato
  • Visita ciascun elemento della raccolta e calcola un valore basato su di esso (traduzione)
  • Riorganizzare i suoi contenuti per qualche scopo (trasformazione)

Ciascuno di questi scenari ha un numero di metodi LINQ progettati per aiutare con l'attività:

  • Per la ricerca, c'è Where() , First() , Any() , All() , Last()
  • Per l'aggregazione, c'è Aggregate() , Average() Sum() , Max() , Min()
  • Per la traduzione c'è Select() e SelectMany()
  • Per la trasformazione c'è 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.

    
risposta data 02.08.2012 - 17:50
fonte
3

Esistono diversi tipi di tecnologie che rientrano nel LINQ :

LINQ-to-Objects

LINQ-to-SQL

LINQ-to-Dataset

LINQ-to-XML

LINQ-to-Entities

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 .

    
risposta data 02.08.2012 - 17:41
fonte

Leggi altre domande sui tag