2010-11-15 148 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