2010-11-15 7 views
0

Je rencontre des problèmes lors de l'utilisation de linq et de l'expression lambda. J'ai un objet de Type Trip.Conversion d'une requête Linq en cumstom Type

`

List<Trip> trip = newTrips.Select(x=>x).ToList(); 
IEnumerable<Trip> data = trip.GroupBy(y=> new { 
          y.StartingNode, 
          y.EndingNode, 
          y.PathNumber}).Cast<Trip>(); 

List <Trip> listAgain = data.ToList(); // This is where i get the error 

ne peut pas convertir implicitement system.collection.generics.list à DataObjects.Trip

` I Need pour convertir le résultat obtenu à partir de LINQ à un objet de liste. Ou y a-t-il un autre meilleur moyen d'y parvenir?

+0

Quel est le type de données pour 'new Trips'? – IAbstract

+0

Ce qui n'est pas clair pour moi, c'est ce que vous espérez obtenir de cette requête. Vous regroupez un 'IEnumerable ' par une variable anonyme, puis vous essayez de renvoyer les groupes au type 'Trip'. Il vous manque du code ou vous faites juste la mauvaise requête. Quelle est votre intention? – Enigmativity

Répondre

0

trip.GroupBy(...) ne renvoie pas un IEnumerable<Trip>. Il renvoie un IEnumerable<IGrouping<'a, Trip>>, où 'a est un type anonyme créé pour les objets new {...}.

Ces objets IGrouping<'a, Trip> sont des collections et ne peuvent pas être convertis directement en Trip.

Si vous voulez juste un seul objet par groupe, faire:

IEnumerable<Trip> data = trip 
    .GroupBy(y => new { 
     y.StartingNode, 
     y.EndingNode, 
     y.PathNumber 
    }) 
    .Select(g => g.First()); 
List<Trip> listAgain = data.ToList(); 

Alternativement, si vous voulez que tous les objets de voyage, mais regroupé bien par leurs noeuds de début/fin et leur numéro de chemin, faire:

IEnumerable<Trip> data = trip 
    .GroupBy(y => new { 
     y.StartingNode, 
     y.EndingNode, 
     y.PathNumber 
    }) 
    .SelectMany(g => g); 
List<Trip> listAgain = data.ToList(); 

les IGrouping objets sont modélisée par le type d'original, et de retour pour les deux objets Trip.Premier() et .SelectMany()

+0

Merci pour l'explication claire et de travail. J'ai mes affaires en train de travailler – Pawan