2012-06-04 149 views
5

簡單通過嵌套集合

public class TimeLine 
{ 
    public String Name {get;set} 
    public List<Milestone> MilesStones {get;set} 
} 

public class Milestone 
{ 
    public String Name {get;set} 
    public DateTime Time {get;set} 
} 

排序依據父對象我想: from t in DataAccess.TimelineCollection.OrderBy(c=>c.MilesStones.OrderBy(z=>z.MilestoneDate)) select t;卻得到了一個錯誤「至少有一個對象必須實現IComparable。」

我需要通過Milestone.Time訂購TimeLine。列表中的第一個項目將是Milestone集合中最具時間屬性的項目。

需要鏈接幫助。

回答

10

這聽起來像你可能想

var query = DataAccess.TimelineCollection 
         .OrderBy(t => t.MileStones.Min(m => m.Time)); 

換句話說,對於每一個TimeLine,找到最早里程碑,並利用它來進行排序。

當然如果里程碑是爲了,你可以使用:

var query = DataAccess.TimelineCollection 
         .OrderBy(t => t.MileStones.First().Time); 

如有TimeLine沒有里程碑,這兩項將會失敗。

+0

喬恩,謝謝你的回答。有沒有辦法來檢查TimeLine是否沒有里程碑,只是把它放在最上面? – dotsa

+0

'DataAccess.TimelineCollection .Where(m => m.MilesStones.Count!= 0) .OrderBy(t => t.MilesStones.Min(m => m.MilestoneDate)) .Concat((DataAccess.TimelineCollection。 (m => m.MilesStones.Count == 0)));' – dotsa

+0

@dotsa:您可以使用'.OrderBy(t.MileStones.Select(x => x.Time).FirstOrDefault())' –