由于标题描述了使用order by
后出现错误。
按照法规的顺序如下:
var fahrerGroups = dispoLinien.OrderBy(dl => dl.Linie.GetValidLinienVersionByDate(date).Fahrten.Select(f => f.Beginn)).GroupBy(dl => dl.GetValidDispolinienVersionByDate(date).Fahrer);
日期始终是当前日期。
我正在尝试按服务的开始时间排序。据我发现错误发生,因为我的statment返回一个对象类型,而对象没有实现IComparable。我不明白的一点是,我正在尝试对dateTime进行排序,而不是对象类型。
答案 0 :(得分:1)
选择返回IEnumarable
也许,您可以选择第一个元素来对列表进行排序。
我添加 FirstOrDefault ;
var fahrerGroups = dispoLinien
.OrderBy(dl => dl
.Linie
.GetValidLinienVersionByDate(date)
.Fahrten
.Select(f => f.Beginn)
.FirstOrDefault())
.GroupBy(dl => dl
.GetValidDispolinienVersionByDate(date)
.Fahrer);
答案 1 :(得分:0)
似乎你没有尝试按照Fahrt的起点的升序排序你的dispoLinien序列,而是按照Beginn Fahrt序列的升序排序。您尚未定义两个Beginn Fahrt序列之间的比较。
为了证明这一点,我将你难以理解的OrderBy语句拆分成小步骤,我检查这个OrderBy的每个部分的类型。 让我们为你的dispoLinien的第一个元素做这个:
var dl = dispoLinien.First(); var linienVersion = dl.Linie.GetValidLinienVersionByDate(date);
你还没有告诉linienVersion的类型,但返回的linienVersion有一个实现IEnumerable的类型的属性Fahrten。换句话说:从一个dl和一个日期,你可以得到一个linienVersion,作为一系列Fahrts。
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
.Select(fahrt => fahrt.Beginn);
因此,从每个dl中,您都会提取一系列起始时间。
结果是您希望按照Beginns of Fahrts集合的升序订购您的收藏。
我很确定这不是你想要的。如果您想按照Beginn Fahrts的升序订购您的dispLinien,您应该为每个dl获得最早的Fahrts:
var orderedDispoLinien = dispoLinien.OrderBy(dispoLinie =>
dispoLinie.Linie.GetValidLinienVersionByDate(date)
.Fahrten // get only Fahrten
.Where(fahrt => fahrt.Any() // that are not empty
.Select(fahrt => fahrt.Beginn) // from each fahrt take Beginn
.Min(beginn => beginn)); // and use the earliest Beginn Fahrt
现在你按照最小的开头Fahrt的升序排序你的dispoLinien,这意味着最早的Abfahrt的dispoLinie是第一个。
GroupBy没有指定结果中组的顺序,因此在分组之前它对OrderBy没有意义。如果您想要一个有序的结果,您应该在GroupBy
之后订购