至少一个 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