2

我正在尝试DateTime用 Linq 检索由 a 排序的记录到实体,但我也需要它们作为不同的记录。

我的表设计如下所示:

在此处输入图像描述

Umbraco CMS 节点在哪里blogItemNodeId(可以创建评论的博客项目节点)

要求是博客项目列表可以按评论数排序。blogItemNodeId所以我需要通过显示这些博客项目来获得最新的评论。

我当前的 linq 查询如下所示:

var distinctComments = (from c in ctx.BlogComments
                        orderby c.date
                        group c by c.blogItemNodeId
                        into uniqueRecords
                        select uniqueRecords.FirstOrDefault());

这个查询的问题是它找到了第一个(因此FirstOrDefault())记录blogItemNodeId,它应该在哪里找到所有评论中最新的一条blogItemNodeId

有谁知道如何实现这一目标?:-)

提前非常感谢。

编辑

我设法通过这样做使它工作:

var allComments = (from c in ctx.BlogComments
                   orderby c.date descending
                   select c).ToList();

var distinctComments = allComments.GroupBy(x => x.blogItemNodeId).Select(y => y.FirstOrDefault());

但是我必须先得到所有的评论,然后再做这个不太优雅也不高效的小组。

任何帮助是极大的赞赏!

4

1 回答 1

2

您可以将 orderBy 语句和 GroupBy 语句组合成一个语句,如下所示:

var distinctComments = ctx.BlogComments.OrderBy(c => c.date)
                        .GroupBy(x => x.blogItemNodeId)
                        .Select(y => y.FirstOrDefault());

如果性能不好,您可以通过 Singleton 将 DataContext 缓存在 HttpCache 中。有关示例,请参阅此博客文章。这基于 Umbraco DataContext,但可以轻松修改以用于其他类型的上下文。

于 2013-01-08T21:14:18.463 回答