我有以下查询:
var articleGroups = from article in _Context.ArticleVersions
group article by article.ArticleID into articleGroup
select new
{
ArticleID = articleGroup.Key,
ArticleFound = articleGroup.OrderByDescending(x => x.Version)
.First()
};
正在针对存储版本化文章的一组CMS表执行此查询。
我得到了正确的结果,但是当我输出'执行计划'时,我发现每个找到的文章似乎都运行了一次SQL查询。
我假设它与OrderByDescending有关,但由于我还在学习Linq的来龙去脉,我不知道如何改进这个查询?
答案 0 :(得分:1)
试试这个:
var res = from article in _Context.ArticleVersions
group article by article.ArticleID into articleGroup
select articleGroup.OrderByDescending(x => x.Version).First() into articleOut
select new {ArticleID = articleOut.ArticleID, ArticleFound = articleOut.Version};
它按ArticleID对文章进行分组,并将它们存储在articleGroup中。第一个选择,按版本降序排序后,从组中的每个项目中选择第一个文章。结果进入articleOut。第二个Select将articleOut的结果投影到一个新的匿名类型。