Continui seria dedicata LINQ, iar dupa interogarea si ordonarea unei colectii, voi arata modul usor in care se pot selecta elementele in functie de o anumita conditie. Clauza where va filtra rezultatul conform conditiei primite.
De exemplu, colectia contine carti publicate in diferiti ani. Presupunem ca avem nevoie de afisarea tuturor cartilor aparute dupa anul 1990.
List<Book> myBooks = new List<Book>(); myBooks.Add(new Book("Eseu despre orbire", 1, 1995)); myBooks.Add(new Book("Pedepsele", 2, 1853)); myBooks.Add(new Book("Mizerabilii", 2, 1862)); myBooks.Add(new Book("Albastru", 3, 1862)); var newBooks = from book in myBooks where book.Year > 1990 select book; foreach (Book b in newBooks) { Console.WriteLine(String.Format("{0}/{1}", b.Title, b.Year)); }
Va fi afisata o singura inregistrare care corespunde criteriului de filtrare.
Eseu despre orbire/1995
Daca se doreste filtrarea dupa mai multe criterii, se pot folosi operatorii && si ||. De exemplu, pentru afisarea cartilor cu anul aparitiei cuprins intre 1850 si 1870, codul se poate scrie astfel:
var newBooks = from book in myBooks where book.Year > 1850 && book.Year < 1870 select book;
Evident, rezultatul va cuprinde 3 elemente:
Pedepsele/1853
Mizerabilii/1862
Albastru/1862
O data cu filtrarea, pot specifica si ordonarea elementelor (pentru acest caz, o ordonare descrescatoare dupa anul aparitiei, iar in cadrul anului ordonare dupa titlu).
var newBooks = from book in myBooks orderby book.Year descending, book.Title where book.Year > 1850 && book.Year < 1870 select book; foreach (Book b in newBooks) { Console.WriteLine(String.Format("{0}/{1}", b.Title, b.Year)); }
Rezultatul va fi:
Albastru/1862
Mizerabilii/1862
Pedepsele/1853