c# – 由父母和孩子订购的Linq

我有两个表:反馈和评论.反馈可以有很多评论.基本上是简单的父母子女关系.

我有一个页面列出所有反馈和相关的评论,如下所示:

Feedback A
Comment A1
Comment A2

Feedback B
Comment B1

Feedback C (note: no comments)

每个反馈和评论都有一个创建日期.目前我按反馈日期和评论日期订购,所以我总是在顶部有最新的反馈,然后是所有评论.

我想要实现的是:当一个新的评论被添加到反馈中时,这个反馈应该显示在顶部,无论反馈的年龄多大,或者如果没有评论添加反馈,这个反馈现在应该是第一个项目在列表中.假设在反馈B中添加了注释,之后添加了没有注释的新反馈,那么我的列表将如下所示:

Feedback D (this is the new feedback)

Feedback B
Comment B1
Comment B2 (this is the new comment)

Feedback A
Comment A1
Comment A2

Feedback C (note: no comments)

现在反馈D将位于列表的顶部,因为它具有所有反馈和评论的最新日期,而反馈B将是第二,因为它具有评论B2,其将具有第二个最新日期.

到目前为止这是我的代码:

_repositories.Feedback
.Include(f => f.Comments)
.OrderByDescending(f => f.PublishedDate);

我想要的是修改

.OrderByDescending(f => f.PublishedDate)

 获得正确的订单.这甚至可能吗?

最佳答案 选择每个反馈的最后评论日期并按其排序:

_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);
点赞