我正在尝试将带有Linq的DateTime
订购的记录检索到实体,但我也需要它们作为不同的记录。
我的表格设计如下:
其中blogItemNodeId
是Umbraco CMS节点(可以创建评论的博客项目节点)
要求是博客项目列表可以按他们有多少评论进行排序。因此,我需要通过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());
但是在做这个不太优雅也不高效的小组之前,我必须得到所有的评论。
非常感谢任何帮助!
答案 0 :(得分:1)
您可以将orderBy语句和GroupBy语句组合成一个语句,如下所示:
var distinctComments = ctx.BlogComments.OrderBy(c => c.date)
.GroupBy(x => x.blogItemNodeId)
.Select(y => y.FirstOrDefault());
如果性能不好,您可以通过Singleton将您的DataContext缓存在HttpCache中。有关示例,请参阅this blogpost。这基于Umbraco DataContext,但可以轻松修改以用于其他类型的上下文。