正如标题描述的那样,使用order by后会发生错误。
按状态排列的顺序如下:
var fahrerGroups = dispoLinien.OrderBy(dl => dl.Linie.GetValidLinienVersionByDate(date).Fahrten.Select(f => f.Beginn)).GroupBy(dl => dl.GetValidDispolinienVersionByDate(date).Fahrer);日期总是当前日期。
我在试着在服务的开始时间点餐。据我所知,出现了错误,因为我的状态返回一个对象类型,而对象没有实现IComparable。我不明白的一点是,我试图对dateTime进行排序,而不是对对象类型排序。
发布于 2016-10-24 10:44:56
选择返回IEnumarable
也许,您可以选择第一个元素来排序您的列表。
我添加了FirstOrDefault;
var fahrerGroups = dispoLinien
.OrderBy(dl => dl
.Linie
.GetValidLinienVersionByDate(date)
.Fahrten
.Select(f => f.Beginn)
.FirstOrDefault())
.GroupBy(dl => dl
.GetValidDispolinienVersionByDate(date)
.Fahrer);发布于 2016-10-24 12:08:47
看来你并不试图按华氏温度的贝金的升序排列你的dispoLinien序列,而是按Beginn序列的升序排列。您还没有定义两个Beginn序列之间的比较。
为了演示这一点,我已经将困难的OrderBy语句分成了几个小步骤,在这些步骤中,我检查了这个OrderBy的每个部分的类型。让我们为您的dispoLinien的第一个元素执行此操作:
变量dl = dispoLinien.First();var linienVersion =dl.Linie.GetValidLinienVersionByDate(日期);
您还没有告诉linienVersion的类型,但是返回的linienVersion具有实现IEnumerable的类型的属性Fahrten。换句话说:从一个dl和一个日期,您可以得到一个作为华氏序列的linienVersion。
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
.Select(fahrt => fahrt.Beginn);因此,从每个dl中提取一组Fahrts的起始值。
其结果是,您希望通过华氏起点集合的升序顺序来排序您的集合。
我很确定这不是你想要的。如果您想按Beginn Fahrts的升序顺序订购您的dispLinien,您应该为每一个dl获得所有华氏中最早的:
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现在,您已经按照最小的Beginn的升序排序了您的dispoLinien,这意味着dispoLinie与最早的Abfahrt是第一位的。
GroupBy没有指定结果中组的顺序,所以在分组之前它对OrderBy没有意义。如果您想要一个有序的结果,您应该在OrderBy之后使用GroupBy
https://stackoverflow.com/questions/40216222
复制相似问题