代码之家  ›  专栏  ›  技术社区  ›  Zack Peterson

我可以在.NET中嵌套orderby吗?

  •  1
  • Zack Peterson  · 技术社区  · 15 年前

    这似乎不符合我的意愿。

    VB.NET:

    Dim x = Model.Discussions.OrderByDescending(Function(d) d.Messages.OrderByDescending(Function(m) m.Sent).First.Sent)
    For Each d As Discussion In x
        ...
    Next
    

    我得到这个运行时错误:

    序列不包含元素

    应该有20个。

    讨论是消息的集合。

    我想根据每个人的最新信息的年龄对我的讨论进行排序。

    澄清

    我需要整理我的讨论,而不是我的信息。我想通过一个聚合计算对我的讨论进行排序:max(sent)在每个消息中。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Zack Peterson    15 年前

    我认为你不需要 OrderBy 在内部查询中使用 Max (或) Min ):

    Model.Discussions.OrderByDescending( _
        Function(d) d.Messages.Max(Function(m) m.Sent))
    

    虽然在VB中,我更愿意使用查询理解:

    From d In Model.Discussions _
    Order By (Aggregate m In d.Messages Into Max(m.Sent)) Descending _
    Select d
    

    很明显,你之所以犯了错误,是因为你有一些讨论,但没有任何信息;因此打电话来 First 引发异常。 马克斯 也一样。我不确定这是否是您的数据集的问题(似乎没有任何消息的讨论是不合理的),但如果是,您需要使用 Enumerable.Empty() 额外的支票。

        2
  •  5
  •   Agent_9191    15 年前

    你需要使用 .OrderByDescending().ThenBy();

    推荐文章