2010-11-05 7 views
1

J'ai, (dans Linq), un IEnumerable de type Client. Maintenant, je dois retourner une liste générique de type ClientVM. ClientVM est un sous-ensemble de Client (pas un sous-type ou quoi que ce soit), et je n'arrive pas à le faire fonctionner.Convertir IEnumerable <X> à la liste <Y>

Ci-dessous le code que j'ai déjà, mais cela ne fonctionne pas de cette façon. Mais peut-être ce code peut vous donner un ajout à mon poste pour préciser ce que je veux faire:

clientVMs = clients.ToList().ConvertAll(new ClientVM(z => z.Reference, z=>z.Fullname)); 

clientVMs est un List<ClientVM>, ClientWM de classe générique a un constructeur qui prend les deux propriétés, les clients est le IEnumerable<Client>

Et, offtopic, les messages du compilateur lorsque vous traitez avec Generics ne sont pas lisibles pour les humains, à mon humble avis.

+0

c'est le message du compilateur: Erreur Les arguments de type pour la méthode « de System.Collections. Generic.List .ConvertAll (System.Converter ) 'ne peut pas être déduit de l'utilisation. Essayez de spécifier explicitement les arguments de type. – Michel

Répondre

7

Peut-être quelque chose comme ça?

var clientVMs = clients.Select(c => new ClientVM(c.Reference, c.Fullname)) 
         .ToList(); 
+0

Si vite, et j'aime bien le select! Et donc 'pourquoi je n'y ai pas pensé' :) – Michel

1
clients.ToList().Select(new ClientVM{ z => z.Reference, z=>z.Fullname }).ToList(); 
+1

Cela ne retourne pas vraiment une liste; il renvoie une énumérable –

+0

J'étais trop pressé pour lire la question. –

1

Vos expressions lambda sont mal placées. Vous voulez sans doute:

var clientVMs = clients.ToList().ConvertAll(
    client => new ClientVM(client.Reference, client.Fullname)); 
2

Vous avez la mauvaise syntaxe pour le délégué à l'intérieur ConvertAll:

clientVMs = clients.ToList().ConvertAll(z => new ClientVM(z.Reference, z.Fullname)); 
Questions connexes