当前位置:  开发笔记 > 编程语言 > 正文

Linq:Group By没有通过Sql生成Group

如何解决《Linq:GroupBy没有通过Sql生成Group》经验,为你挑选了1个好方法。

我正在尝试通过linq对c#中的实体进行分组,但生成的查询不包含其中的组仅生成选择

LINQ:

IQueryable data = (from a in ctx.EntityDataViews
                                                        select a);

IQueryable groupedData = (from x in data
                                                       group x by new
                                                       {
                                                           x.Id,
                                                           x.Code,
                                                           x.Name,
                                                           x.Amuont,

                                                       } into g
                                                       orderby g.Key.Amuont descending
                                                       select new viewClass()
                                                       {
                                                           Id = g.Key.Id,
                                                           Code = g.Key.Code,
                                                           Name = g.Key.Name,
                                                           Amuont = g.Key.Amuont,
                                                       });

SQL:

SELECT 
[Project1].[Code] AS [Code], 
[Project1].[Name] AS [Name], 
[Project1].[Id] AS [Id], 
[Project1].[Amuont] AS [Amuont]
FROM ( SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Code] AS [Code], 
    [Extent1].[Amuont] AS [Amuont], 
    [Extent1].[Name] AS [Name], 
    FROM [dbo].[EntityDataView] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[Amuont] DESC

Sefe.. 6

它没有创建GROUP BY,因为没有必要.您正在使用group into,您没有迭代该组,并且您没有聚合任何值.如果Id是您的唯一标识列,则您甚至不创建组,因为每个组只有一个项目.这与简单的选择基本相同.

您必须接受EF将根据自己对LINQ查询的评估创建SQL查询.这些查询可能不同.您唯一的保证是它们产生相同的结果.



1> Sefe..:

它没有创建GROUP BY,因为没有必要.您正在使用group into,您没有迭代该组,并且您没有聚合任何值.如果Id是您的唯一标识列,则您甚至不创建组,因为每个组只有一个项目.这与简单的选择基本相同.

您必须接受EF将根据自己对LINQ查询的评估创建SQL查询.这些查询可能不同.您唯一的保证是它们产生相同的结果.


好的答案(尤其是“ Id”部分!EF确实足够聪明,可以根据元数据删除不必要的运算符。
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有