首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >至少有一个对象必须通过以下方式实现IComparable顺序

至少有一个对象必须通过以下方式实现IComparable顺序
EN

Stack Overflow用户
提问于 2016-10-24 10:32:47
回答 2查看 2.1K关注 0票数 2

正如标题描述的那样,使用order by后会发生错误。

按状态排列的顺序如下:

代码语言:javascript
运行
复制
var fahrerGroups = dispoLinien.OrderBy(dl => dl.Linie.GetValidLinienVersionByDate(date).Fahrten.Select(f => f.Beginn)).GroupBy(dl => dl.GetValidDispolinienVersionByDate(date).Fahrer);

日期总是当前日期。

我在试着在服务的开始时间点餐。据我所知,出现了错误,因为我的状态返回一个对象类型,而对象没有实现IComparable。我不明白的一点是,我试图对dateTime进行排序,而不是对对象类型排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-24 10:44:56

选择返回IEnumarable

也许,您可以选择第一个元素来排序您的列表。

我添加了FirstOrDefault

代码语言:javascript
运行
复制
var fahrerGroups = dispoLinien
      .OrderBy(dl => dl
         .Linie
         .GetValidLinienVersionByDate(date)
         .Fahrten
         .Select(f => f.Beginn)
         .FirstOrDefault())
      .GroupBy(dl => dl
         .GetValidDispolinienVersionByDate(date)
         .Fahrer);
票数 1
EN

Stack Overflow用户

发布于 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。

代码语言:javascript
运行
复制
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
    .Select(fahrt => fahrt.Beginn);

因此,从每个dl中提取一组Fahrts的起始值。

其结果是,您希望通过华氏起点集合的升序顺序来排序您的集合。

我很确定这不是你想要的。如果您想按Beginn Fahrts的升序顺序订购您的dispLinien,您应该为每一个dl获得所有华氏中最早的:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40216222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档