父和子的Linq顺序

本文关键字:Linq 顺序 | 更新日期: 2023-09-27 18:09:51

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

我有一个页面来列出所有的反馈和相关的评论,像这样:

<>之前反馈一个评论A1评论A2反馈B评论B1反馈C(注:无评论)之前

每个反馈和评论都有一个创建的日期。目前,我是根据反馈日期和评论日期排序的,所以我总是把最新的反馈放在最上面,然后是所有的评论。

我想要实现的是:当一个新的评论被添加到一个反馈,这个反馈应该显示在顶部,无论多么旧的反馈是或者如果一个反馈添加没有评论,这个反馈现在应该是列表中的第一项。假设在反馈B中添加了一条评论,然后添加了一条没有评论的新反馈,那么我的列表将看起来像这样:

<>之前反馈D(这是新的反馈)反馈B评论B1评论B2(这是新的评论)反馈一个评论A1评论A2反馈C(注:无评论)之前

现在反馈D将在列表的顶部,因为它有所有反馈和评论的最新日期,反馈B将在第二,因为它有评论B2,它将有第二个最新日期。

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

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

我想修改

。orderbydescent (f => f. publishheddate)
以获得正确的顺序。这可能吗?

父和子的Linq顺序

为每个反馈选择最后评论日期并按它们排序:

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