我有两个表:反馈和评论.反馈可以有很多评论.基本上是简单的父母子女关系.
我有一个页面列出所有反馈和相关的评论,如下所示:
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);