嵌套组导致服务器上的命中次数过多

时间:2017-02-14 13:11:36

标签: c# linq linq-to-sql

我有以下查询:

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的来龙去脉,我不知道如何改进这个查询?

1 个答案:

答案 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的结果投影到一个新的匿名类型。