2010-11-15 74 views
0

我在使用linq和lambda表达式时遇到了一些问题。我有一个类型旅行的对象。将Linq查询转换为cumstom类型

`

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 

不能隐式转换system.collection.generics.list到DataObjects.Trip

` 我需要从LINQ到一个列表对象所获得的结果转换。或者还有其他更好的办法来达到这个目标吗?

+0

“新Trips”的数据类型是什么? – IAbstract 2010-11-15 02:46:34

+0

我不清楚什么是你希望摆脱这个查询。你正在用一个匿名变量对一个'IEnumerable '进行分组,然后你试图将这些组重新转换为Trip类型。你错过了一些代码,或者你只是在做错误的查询。你的意图是什么? – Enigmativity 2010-11-15 03:23:17

回答

0

trip.GroupBy(...)不返回IEnumerable<Trip>。它返回IEnumerable<IGrouping<'a, Trip>>,其中'a是为new {...}对象创建的匿名类型。

这些IGrouping<'a, Trip>对象是集合,不能直接转换为Trip

如果你想每组只是一个单一的对象,这样做:

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

或者,如果你想所有的行程对象,但通过他们的开始/结束节点及其路径号很好分组,这样做:

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

IGrouping目的通过原始类型模板,以及用于二者。首先().SelectMany返回Trip对象()

+0

感谢您的明确解释和工作。我有我的东西工作 – Pawan 2010-11-15 07:56:16