获得最大&实体框架中的分钟数,一次查询即可获得最佳查询

编程入门 行业动态 更新时间:2024-10-22 22:52:03
本文介绍了获得最大&实体框架中的分钟数,一次查询即可获得最佳查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我知道这个问题,但是我想做的就是获取一些与此生成的SQL相似的东西:

I'm aware of this question, but what I would like to do is obtain something close to this generated SQL:

select MAX(Column), MIN(Column) from Table WHERE Id = 1

当我尝试此操作时:

var query = from d in db.Table where d.Id == 1 select new { min = db.Table.Max(s => s.Column), max = db.Table.Min(s => s.Column) };

生成的sql如下所示:

The generated sql looks like this:

SELECT [Extent1].[Id] AS [Id], [GroupBy1].[A1] AS [C1], [GroupBy2].[A1] AS [C2] FROM [dbo].[Table] AS [Extent1] CROSS JOIN (SELECT MAX([Extent2].[Column]) AS [A1] FROM [dbo].[Table] AS [Extent2] ) AS [GroupBy1] CROSS JOIN (SELECT MIN([Extent3].[Column]) AS [A1] FROM [dbo].[Table] AS [Extent3] ) AS [GroupBy2] WHERE ([Extent1].[Id] = 1) AND (1 IS NOT NULL)

我也尝试过:

var query = from d in db.Table where d.Id == 1 group d by d.Id into grp let min = grp.Min(s => s.Column) let max = grp.Max(s => s.Column) select new { min, max };

哪个给这个:

SELECT [Project2].[Id] AS [Id], [Project2].[C1] AS [C1], [Project2].[C2] AS [C2] FROM ( SELECT [Project1].[C1] AS [C1], [Project1].[Id] AS [Id], (SELECT MAX([Extent2].[Column]) AS [A1] FROM [dbo].[Table] AS [Extent2] WHERE ([Extent2].[Id] = 1) AND (1 IS NOT NULL) AND ([Project1].[Id] = [Extent2].[Id])) AS [C2] FROM ( SELECT [GroupBy1].[A1] AS [C1], [GroupBy1].[K1] AS [Id] FROM ( SELECT [Extent1].[Id] AS [K1], MIN([Extent1].[Column]) AS [A1] FROM [dbo].[Table] AS [Extent1] WHERE ([Extent1].[Id] = 16) AND (16 IS NOT NULL) GROUP BY [Extent1].[Id] ) AS [GroupBy1] ) AS [Project1] ) AS [Project2]

它们都起作用,并且性能影响几乎可以忽略不计,因此主要是美学上的: 生成的两个查询都伤害了我的眼睛.

They both work, and the performance hit is probably negligible, so it's mostly aesthetic: The two generated queries both hurt my eyes.

推荐答案

尝试删除let语句-以下将产生预期的结果:

Try removing the let statements - the below produces expected results:

var q = from d in db.Table where d.Id == 1 group d by d.Id into g select new { Id = g.Key, // shown for illustrative purposes ColumnMin = g.Min( gi => gi.Column ), ColumnMax = g.Max( gi => gi.Column ) }; var result = q.SingleOrDefault();

产生的SQL:

SELECT [GroupBy1].[K1] AS [Id], [GroupBy1].[A1] AS [C1], [GroupBy1].[A2] AS [C2] FROM ( SELECT [Extent1].[Id] AS [K1], MIN([Extent1].[Column]) AS [A1], MAX([Extent1].[Column]) AS [A2] FROM [dbo].[Table] AS [Extent1] WHERE 1 = [Extent1].[Id] GROUP BY [Extent1].[Id] ) AS [GroupBy1]

更多推荐

获得最大&实体框架中的分钟数,一次查询即可获得最佳查询

本文发布于:2023-11-30 03:23:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1648556.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实体   框架   amp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!