一尘不染

使用Linq to SQL,如何查找表中列的最小值和最大值?

sql

我想找到一种最快的方法,用一次Linq to SQL往返来获取表中一列的最小值和最大值。因此,我知道这将在两次往返中起作用:

int min = MyTable.Min(row => row.FavoriteNumber);
int max = MyTable.Max(row => row.FavoriteNumber);

我知道我可以使用,group但没有group by子句,我想汇总整个表!而且我不能在没有分组的情况下使用.Min。我确实尝试过:

from row in MyTable 
group row by true into r 
select new { 
    min = r.Min(z => z.FavoriteNumber), 
    max = r.Max(z => z.FavoriteNumber) 
}

但是那个疯狂的group子句看起来很愚蠢,并且它生成的SQL比需要的要复杂。

因此,有什么方法可以获取正确的SQL?

编辑:这些人也失败了:Linq to
SQL:如何在没有分组依据的情况下进行汇总?
…如果真的没有答案,则由LINQ设计师进行la脚的监督。

编辑2:在SQL Server Management Studio执行计划分析中,我查看了自己的解决方案(使用荒谬的常量group
by子句),在我看来,它与由以下人员生成的计划相同:

SELECT MIN(FavoriteNumber), MAX(FavoriteNumber)
FROM MyTable

因此,除非有人能提出一个简单或相等的好答案,否则我认为我必须将其标记为“我自己回答”。有什么想法吗?


阅读 157

收藏
2021-03-17

共1个答案

一尘不染

如问题中所述,此方法似乎实际上生成了最佳的SQL代码,因此,尽管在LINQ中看起来有点怪异,但它应该是最佳的性能。

from row in MyTable  
group row by true into r  
select new {  
    min = r.Min(z => z.FavoriteNumber),  
    max = r.Max(z => z.FavoriteNumber)  
}
2021-03-17