我正在尝试通过linq对c#中的实体进行分组,但生成的查询不包含其中的组仅生成选择
LINQ:
IQueryabledata = (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查询.这些查询可能不同.您唯一的保证是它们产生相同的结果.
它没有创建GROUP BY
,因为没有必要.您正在使用group into
,您没有迭代该组,并且您没有聚合任何值.如果Id
是您的唯一标识列,则您甚至不创建组,因为每个组只有一个项目.这与简单的选择基本相同.
您必须接受EF将根据自己对LINQ查询的评估创建SQL查询.这些查询可能不同.您唯一的保证是它们产生相同的结果.