Le query expressions di C# 3.0 che di solito si usano per comporre le query di LINQ sono in realtà una facility che permette di ottenere una maggiore leggibilità del codice. Esse infatti vengono tradorre dal compilatore in una sequenza di chiamate ad Extension Methods che poi viene eseguita runtime.

Questo preambolo serve per introdurre in voi il dubbio che le query expressions abbiano qualche limite che possiamo superare facendo uso diretto dei metodi. Un esempio è dato dalla clausola "where" che a prima vista è esaustiva. Un esame più approfondito del relativo metodo Where() ci rivela che quest'ultimo ha due overload, e che solo uno dei due mappa direttamente la query expression. Il secondo metodo accetta come argomento una lambda expression che espone non solo l'elemento ma anche il suo indice nella collection.

Ecco un esempio di quello che possiamo fare:

   1: public static void Main(string[] args)
   2: {
   3:     var r1 = from name in stars
   4:              where name.StartsWith("Gamma")
   5:              select name;
   6:  
   7:     var r2 = stars.Where((name, index) => name.StartsWith("Gamma") && index % 2 == 0);
   8:  
   9:     Display(r1);
  10:     Console.WriteLine("**************************");
  11:     Display(r2);
  12:     Console.ReadLine();
  13: }

La variabile "stars" del mio esempio è un array di stringhe che contiene una serie di nomi di stelle. Per brevità l'ho omessa. Nell'esempio abbiamo che r1 viene valorizzato con una normale query expression mentre per r2 si fa uso del secondo overload di Where(). In questo modo si riesce a selezionare solo gli elementi pari. Si tratta di un esempio semplice, ma rivela che conviene approfondire bene lo strumento perchè ha dei risvolti nascosti che devolo essere rivelati.

Technorati Tag: ,

Commenti (2) -

# | Gian Maria | 31.01.2008 - 19.31

PErsonalmente sono un fanatico delle interfacce fluenti e mi trovo meglio usando direttamente gli extension methods Laughing ma son gusti.

alk.

# | Andrea Boschin | 31.01.2008 - 19.56

Se vuoi saperla tutta anche io li trovo molto più comodi e se li scrivi per bene sono anche leggibili. Smile

Aggiungi Commento