.net - `SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` 作为 LINQ to SQL

标签 .net linq linq-to-sql

这个相当简单的 SQL 查询在从 LINQ 尝试时被证明是非常令人困惑的。

我有一个 SQL 表 Plant带列ZoneMin .

我想找到列中值的最小值和最大值。
T-SQL 中的答案非常简单:
SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant
什么 LINQ 查询可以让我使用这个(或一些类似的)SQL?

我在 .Aggregate() 和 .GroupBy() 上做了各种尝试,但都没有成功。我还查看了几个看起来相似的 SO 问题。

这可以通过应用于结果数组的方法简单地实现,但是当它在 T-SQL 中如此简单时,我不需要从每个 SQL 行传输值。

最佳答案

为了获得与原始查询相同的性能,您需要使用分组(通过常量以最小化影响,例如 0 ),以便您可以在同一查询中两次引用同一组记录。使用表名会导致对每个引用生成一个新查询。请尝试以下操作:

(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。

关于.net - `SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` 作为 LINQ to SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672239/

相关文章:

.net - 使用 Entity Framework 4.3 迁移而不依赖于实际数据库

c# - Silverlight、Wpf Web App (xbap) 还是单击一次?优点和缺点

c# - Linq 查询按日期对项目进行计数和分组

c# - 将 Lambda LINQ 语句作为 Func<> 传递时出现问题

sql - 更新/删除/插入是否在 LINQ 路线图上?

c# - 一个计时器,多个方法调用还是多个计时器,一个方法调用?

c# - 如何处理这种竞争条件?

c# - 使用 linq 检查是否不存在子句

c# - 在 session 或替代解决方案中存储 linq-to-sql 对象

c# - linq插入: getting the row number