octobre
2009
On entame le milieu de la semaine et pour se motiver un peu plus, rien de tel qu’un second billet sur les opérateurs Linq et en plus, ça ne va pas être compliqué. L’opérateur de ce billet est Concat !
Imaginez que vous avez deux listes et que vous désirez n’en faire qu’une seule qui regrouperait les éléments de la première liste avec les éléments de la seconde liste : comment procéderiez-vous ?
Le facile est surement d’utiliser la méthode AddRange disponible sur une liste, ainsi vous avez surement pensez à quelque chose de ce genre :
List<SampleLibrary.MembreDeveloppez> listeMembres2 = SampleLibrary.MembreDeveloppez.GetMembresDeveloppez(); List<SampleLibrary.MembreDeveloppez> listeMembreResult = new List<SampleLibrary.MembreDeveloppez>();
listeMembreResult.AddRange(listeMembres1);
listeMembreResult.AddRange(listeMembres2);
Grâce à la méthode Concat de Linq, vous allez pouvoir concaténer deux listes d’objets pour n’en faire qu’une seule. Je dis liste mais ça fonctionnerait avec n’importe quelle collection/séquence tant qu’elle implémente IEnumerable ou IEnumerable<T>.
List<SampleLibrary.MembreDeveloppez> listeMembres2 = SampleLibrary.MembreDeveloppez.GetMembresDeveloppez(); var query = listeMembres1.Concat(listeMembres2); List<SampleLibrary.MembreDeveloppez> listeMembresResult1 = query.ToList();
Comme vous pouvez le remarquer, j’ai utilisé l’opérateur ToList (que nous avons déjà vu lors d’un autre billet) après l’opérateur Concat pour obtenir mes objets dans une liste. La raison est que l’opérateur Concat renvoie un IEnumerable<T>. En fait pour être plus précis, on récupère un ConcatIterator<T>.
L’opérateur Concat ne crée donc pas directement une séquence avec le bon résultat mais va tout simplement s’occuper de mémoriser les séquences à concaténer et ce n’est qu’à la demande que le résultat sera exécuté (par exemple lors d’un foreach ou comme dans notre cas lors de l’utilisation de l’opérateur ToList. On appelle ça l’exécution différée.
Pour le prouver, on va modifier légèrement le code pour ajouter un nouvel élément dans listeMembre1 après avoir créé la requête de concaténation.
List<SampleLibrary.MembreDeveloppez> listeMembres2 = SampleLibrary.MembreDeveloppez.GetMembresDeveloppez(); var query = listeMembres1.Concat(listeMembres2); List<SampleLibrary.MembreDeveloppez> listeMembresResult1 = query.ToList();
listeMembres1.Add(
new SampleLibrary.MembreDeveloppez() { Nom = « Marc Lussac », NombreMessages = 23000 }); List<SampleLibrary.MembreDeveloppez> listeMembresResult2 = query.ToList();Si vous essayez ce code, vous vous apercevrez que listeMembresResult2 contient un élément de plus que listeMembresResult1.
Je pense que pour un opérateur dit facile, on est allé assez dans le détail.
Rendez-vous au prochain numéro !
Déménagement
Next Microsoft CEO
Articles récents
- Changement d’adresse de ce blog
- Article : les nouveautés de C# 5.0
- Modèle Entity Framework généré avec SQL Server 2008 et utilisé sous SQL Server 2005
- Les photos, vidéos et cadeaux des TechDays 2011
- La première journée en ligne sur TechDays TV
- Suivez les TechDays 2011 comme si vous y étiez sur la chaîne TechDays TV
- Téléchargez le programme des conférence des TechDays 2011
- Dernier jour des TechDays = plus de chance de remporter des cadeaux sur le stand de dvp !
- Venez à notre rencontre lors des TechDays 2011
- Les flux à ne pas rater lors des TechDays 2011
- Les TechDays 2011 s’invite sur votre smartphone Windows Phone 7
- Exclu des cadeaux du concours Developpez.com lors des TechDays 2011
- Ouverture de la galerie d’images sur notre site des TechDays
- Partagez votre expérience des Microsoft TechDays
- Grand concours Microsoft “FAN des TechDays 2011” : épisode 2 !
- Mettez-vous aux couleurs des TechDays 2011 !
- Developpez.com aux TechDays 2011
- Le Challenge Azure 2010 est fini !
- Suivez la keynote de la pdc10 en direct sur internet à 18h !
- MVP Visual C# 2010 – 2011 !!!