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

Abd*_*eed 3 c# sql linq sql-server entity-framework

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

LINQ:

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

IQueryable<viewClass> 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,
                                                       });
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Sef*_*efe 6

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

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

  • 好的答案(尤其是“ Id”部分!EF确实足够聪明,可以根据元数据删除不必要的运算符。 (2认同)