Linq & les expressions lambda
L Language In Integrated Q Query
Procéder à des requêtes sur nos objets, comme on le ferait en SQL, au sein même de notre langage de programmation. Virtuellement, tout ce qu’on sait faire avec SQL peut désormais être réalisé en C#
Linq peut s’interfacer avec différentes cibles : ◦ Les collections d’objets implémentant l’interface IEnumerable : Linq to Object ◦ Des données SQL (via Entity Framework) : Linq to SQL ◦ Des flux XML (via les classes Xelement, XDocument,…) : Linq To XML ◦ D’autres encore…
2 syntaxes : ◦ Syntaxe type SQL: var result = from u in users where u.login == ‘‘toto’’ select u.mail; ◦ Syntaxe objet: var result = users.Where(u => u.login == ‘‘toto’’).Select(u => u.mail); On appelle cette notation, une expression lambda
Il s’agit de fonctions anonymes pouvant être utilisées comme des variables. u => u.login == ‘‘toto’’ : ◦ Ici, on définit une fonction prenant en entrée un User et retournant un booléen ◦ Concrètement, pout tout User u, on va tester si on login est égal à ‘‘toto’’. ◦ Les types entrant et sortant sont définis par la méthode Where. Dans la méthode Select, le paramètre d’entrée est toujours un User mais le paramètre de sortie changera en fonction du champ sélectionné: ◦ u => u.mail : Ici, on récupère une string.
Reprenons notre exemple : users.Where(u => u.login == ‘‘toto’’).Select(u => u.mail). La syntaxte complète devrait être celle-ci: users.Where (u => u.login == ‘‘toto’’).Select (u => u.mail). Les méthodes de Linq sont génériques, elles ont besoin de connaitre le type sur lequel elles travaillent. Si on peut éviter de le préciser, c’est qu’elle peuvent l’inférer à partir du typage de la collection
Des questions? Au travail!