至少一个 object 必须实现 IComparable order by
At least one object must implement IComparable order by
如标题所述,使用order by
后出现错误。
按语句排序如下:
var fahrerGroups = dispoLinien.OrderBy(dl => dl.Linie.GetValidLinienVersionByDate(date).Fahrten.Select(f => f.Beginn)).GroupBy(dl => dl.GetValidDispolinienVersionByDate(date).Fahrer);
日期始终是当前日期。
我正在尝试按服务开始时间排序。据我发现错误发生,因为我的声明 returns 一个 object 类型和 object 没有实现 IComparable。我不明白的一点是我正在尝试对 dateTime 而不是 object 类型进行排序。
Select returns IEnumerable
或许,您可以 select 第一个元素对列表进行排序。
我添加FirstOrDefault;
var fahrerGroups = dispoLinien
.OrderBy(dl => dl
.Linie
.GetValidLinienVersionByDate(date)
.Fahrten
.Select(f => f.Beginn)
.FirstOrDefault())
.GroupBy(dl => dl
.GetValidDispolinienVersionByDate(date)
.Fahrer);
您似乎没有尝试按 Beginn of Fahrt 的升序排列 dispoLinien 序列,而是按 Beginn Fahrt 序列的升序排列。您尚未定义两个 Beginn Fahrt Sequences 之间的比较。
为了证明这一点,我将您难以理解的 OrderBy 语句分成几个小步骤,在这些步骤中我会检查此 OrderBy 的每个部分的类型。
让我们对 dispoLinien 的第一个元素执行此操作:
var dl = dispoLinien.First();
var linienVersion = dl.Linie.GetValidLinienVersionByDate(日期);
您没有告诉 linienVersion 的类型,但返回的 linienVersion 有一个实现 IEnumerable 类型的 属性 Fahrten。换句话说:从 dl 和日期你可以得到一个 linienVersion 作为 Fahrts 的序列。
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
.Select(fahrt => fahrt.Beginn);
因此,您从每个 dl 中提取了 Beginns of Fahrts 的集合。
结果是您想按 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
现在您已经按照最小 Beginn Fahrt 的升序对您的 dispoLinien 进行了排序,这意味着具有最早 Abfahrt 的 dispoLinien 排在第一位。
GroupBy没有指定分组在结果中的顺序,所以在Grouping之前对OrderBy没有意义。如果你想要一个有序的结果,你应该在 GroupBy
之后 OrderBy
如标题所述,使用order by
后出现错误。
按语句排序如下:
var fahrerGroups = dispoLinien.OrderBy(dl => dl.Linie.GetValidLinienVersionByDate(date).Fahrten.Select(f => f.Beginn)).GroupBy(dl => dl.GetValidDispolinienVersionByDate(date).Fahrer);
日期始终是当前日期。
我正在尝试按服务开始时间排序。据我发现错误发生,因为我的声明 returns 一个 object 类型和 object 没有实现 IComparable。我不明白的一点是我正在尝试对 dateTime 而不是 object 类型进行排序。
Select returns IEnumerable
或许,您可以 select 第一个元素对列表进行排序。
我添加FirstOrDefault;
var fahrerGroups = dispoLinien
.OrderBy(dl => dl
.Linie
.GetValidLinienVersionByDate(date)
.Fahrten
.Select(f => f.Beginn)
.FirstOrDefault())
.GroupBy(dl => dl
.GetValidDispolinienVersionByDate(date)
.Fahrer);
您似乎没有尝试按 Beginn of Fahrt 的升序排列 dispoLinien 序列,而是按 Beginn Fahrt 序列的升序排列。您尚未定义两个 Beginn Fahrt Sequences 之间的比较。
为了证明这一点,我将您难以理解的 OrderBy 语句分成几个小步骤,在这些步骤中我会检查此 OrderBy 的每个部分的类型。 让我们对 dispoLinien 的第一个元素执行此操作:
var dl = dispoLinien.First(); var linienVersion = dl.Linie.GetValidLinienVersionByDate(日期);
您没有告诉 linienVersion 的类型,但返回的 linienVersion 有一个实现 IEnumerable 类型的 属性 Fahrten。换句话说:从 dl 和日期你可以得到一个 linienVersion 作为 Fahrts 的序列。
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
.Select(fahrt => fahrt.Beginn);
因此,您从每个 dl 中提取了 Beginns of Fahrts 的集合。
结果是您想按 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
现在您已经按照最小 Beginn Fahrt 的升序对您的 dispoLinien 进行了排序,这意味着具有最早 Abfahrt 的 dispoLinien 排在第一位。
GroupBy没有指定分组在结果中的顺序,所以在Grouping之前对OrderBy没有意义。如果你想要一个有序的结果,你应该在 GroupBy
之后 OrderBy