Linq按父子排序

4
我有两个表:反馈(Feedback)和评论(Comments)。一个反馈可以有多条评论,基本上是简单的父子关系。
我有一个页面用于列出所有反馈以及相关评论,如下所示:
反馈A 评论A1 评论A2
反馈B 评论B1
反馈C(注意:没有评论)
每个反馈和评论都有一个创建日期。目前,我按照反馈日期和评论日期排序,所以我总是将最新的反馈放在顶部,然后是所有的评论。
我想要实现的是:当一个新的评论添加到一个反馈中时,这个反馈应该被显示在顶部,不管这个反馈有多旧,或者如果一个反馈被添加但是没有评论,那么这个反馈应该成为列表中的第一项。假设在Feedback B中添加了一条评论,然后添加了一条没有评论的新反馈,那么我的列表将如下所示:
反馈D(这是新反馈)
反馈B 评论B1 评论B2(这是新评论)
反馈A 评论A1 评论A2
反馈C(注意:没有评论)
现在,反馈D将处于列表的顶部,因为它具有所有反馈和评论中最新的日期,而反馈B将是第二个,因为它具有评论B2,这将是第二新的日期。
这是我的代码:
_repositories.Feedback
.Include(f => f.Comments)
.OrderByDescending(f => f.PublishedDate);

我想修改
.OrderByDescending(f => f.PublishedDate)
以得到正确的顺序。这是否可能?
1个回答

5
按照日期选择每个反馈的最后评论,并根据它们进行排序:
_repositories.Feedback
.Include(f => f.Comments)
.OrderByDescending(f => 
    f.Comments
    .Select(c => (DateTime?)c.PublishedDate)
    .OrderByDescending(c => c)
    .FirstOrDefault() ?? f.PublishedDate
)
.ThenByDescending(f => f.PublishedDate);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接