martedì 2 novembre 2010

DataTable.Select( Filter )

Giusto perchè sono sempre il primo a dimenticarsi le cose semplici... ecco una delle mille cosette che servono ma che ci si dimentica di utilizzare.

Quanto ci cosa una query in memoria ??? e costa di meno di una Query su Db ???

Come sempre tutto dipende da che cosa si deve fare anche se sono più che convinto che in molti casi caricarsi un centinaio di record in memoria non sia poi così oneroso (ad oggi).

In alcuni casi torna comodo, però saper effettuare una query anche in memoria..

in questo esempio ho creato una dataTable con 4 colonne, e ben poche righe, in questo modo
è più semplice seguire gli esempi.


DataTable dt = new DataTable("filteTest");
dt.Columns.Add("clnNome");
dt.Columns.Add("clnCognome");
dt.Columns.Add("clnNazionalita");
dt.Columns.Add("clnNote");


dt.Rows.Add(new object[] { "Valentino", "Rossi","i", "Motociclista" });
dt.Rows.Add(new object[] { "Lorenzo", "Jorge", "s", "Motociclista" });
dt.Rows.Add(new object[] { "Daniel", "Pedrosa","s", "Motociclista" });
dt.Rows.Add(new object[] { "Rolling", "Stoner","a", "Stunt man" });
dt.Rows.Add(new object[] { "Andrea", "Dovizioso","i", "Motociclista" });


DataRow[] drsMotociclisti = dt.Select("clnNote = 'Motociclista'");
Console.WriteLine( drsMotociclisti.Length.ToString() ); // scrive 4

DataRow[] drsItaliani = dt.Select("clnNazionalita = 'i'");
Console.WriteLine(drsItaliani.Length.ToString()); // scrive 2

DataRow[] drsMisti = dt.Select("clnNazionalita = 's' OR clnNazionalita ='i' ");
Console.WriteLine(drsMisti.Length.ToString()); // scrive 4

DataRow[] drsMisti = dt.Select("clnNazionalita = 'i' AND clnNote = 'Motociclista ");
Console.WriteLine(drsMisti.Length.ToString()); // scrive 2


ps. Non è una nota polemica, ma non ho proprio trovato esempi in cui far CADERE Stoner, tuttavia sono convinto che farlo sia già bravo senza il mio aiuto.

Nessun commento: