`SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` as LINQ to SQL(`SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` 作为 LINQ to SQL)
问题描述
事实证明,这个相当简单的 SQL 查询在从 LINQ 中尝试时非常令人困惑.
This rather simple SQL query is proving to be quite perplexing when attempting it from LINQ.
我有一个带有 ZoneMin
列的 SQL 表 Plant
.
I have a SQL table Plant
with column ZoneMin
.
我想找出列中值的最小值和最大值.
T-SQL 中的答案很简单:
I want to find the minimum and maximum of the values in the column.
The answer in T-SQL is quite simple:
SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant
什么 LINQ 查询可以让我使用这个(或一些类似的)SQL?
What's a LINQ query that could get me to this (or some similar) SQL?
我对 .Aggregate() 和 .GroupBy() 进行了各种尝试,但都没有成功.我还查看了几个看起来相似的 SO 问题.
I've made various attempts at .Aggregate() and .GroupBy() with no luck. I've also looked at several SO questions that seem similar.
这可以简单地通过应用于结果数组的方法来实现,但我不应该需要从每个 SQL 行传输一个值,因为它在 T-SQL 中如此简单.
This could be simply achieved with methods applied to a resulting array, but I shouldn't need to transport a value from every SQL row when it's so simple in T-SQL.
推荐答案
为了获得与原始查询相同的性能,您需要使用分组(通过一个常量来最小化影响,例如 0
),以便您可以在同一查询中两次引用同一组记录.使用表名会导致对每个引用生成一个新查询.请尝试以下操作:
To achieve the same performance as your original query, you'll need to use grouping (by a constant to minimize impact, e.g. 0
), so that you can refer to the same set of records twice in the same query. Using the table name causes a new query to be produced on each reference. Try the following:
(from plant in db.Plants
group plant by 0 into plants
select new { Min = plants.Min(p => p.ZoneMin), Max = plants.Max(p => p.ZoneMin) }
).Single()
这会产生以下查询:
SELECT MIN(plants.ZoneMin), MAX(plants.ZoneMin)
FROM (SELECT 0 AS Grp, ZoneMin FROM Plants) AS plants
GROUP BY plants.Grp
优化器完成后,它会输出与您的查询等效的内容,至少根据 SQL Server Management Studio 的说法是这样.
And after the optimizer is done with it, it spits out something equivalent to your query, at least according to SQL Server Management Studio.
这篇关于`SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` 作为 LINQ to SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:`SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` 作为 LINQ to
基础教程推荐
- 当键值未知时反序列化 JSON 2022-01-01
- 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具 2022-01-01
- 我什么时候应该使用 GC.SuppressFinalize()? 2022-01-01
- C# - 如何列出发布到 ASPX 页面的变量名称和值 2022-01-01
- C# - 将浮点数转换为整数...并根据余数更改整数 2022-01-01
- 创建属性设置器委托 2022-01-01
- 覆盖 Json.Net 中的默认原始类型处理 2022-01-01
- 如何使用OpenXML SDK将Excel转换为CSV? 2022-01-01
- 使用 SED 在 XML 标签之间提取值 2022-01-01
- Page.OnAppearing 中的 Xamarin.Forms Page.DisplayAlert 2022-01-01