Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Filtrarea unei colectii cu LINQ

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

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*