2012-06-04 113 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())' –