我正在尝试在 linq 中对 C# 中的实体进行分组,但生成的查询不包含分组依据,它只生成选择
林克:
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,
});
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
最佳答案
它没有创建GROUP BY
,因为没有必要。您正在使用 group into
,您没有迭代该组,也没有聚合任何值。如果 Id
是您的唯一标识列,您甚至没有创建组,因为每个组只有一个项目。这与简单的选择基本相同。
您必须接受 EF 将根据自己对 LINQ 查询的评估创建 SQL 查询。这些查询可能不同。您唯一的保证是它们产生相同的结果。
关于c# - Linq:Group By 没有生成 Group by Sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826375/