c# – 使用Linq到SQL,如何在表中找到列的最小和最大值?

我想找到一个最快的方式来获取一个列的最小和最大值在一个单一的Linq到SQL的往返。所以我知道这将工作在两个往返:

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

我知道我可以使用组,但是我没有一个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) 
}

但这个疯狂的组语句似乎很愚蠢,而且它所做的SQL比它需要的更复杂。

那么,有什么办法才能得到正确的SQL?

编辑:这些家伙也失败了:Linq to SQL: how to aggregate without a group by? …如果真的没有答案,LINQ设计师跛脚监督

编辑2:在SQL Server Management Studio执行计划分析中,我查看了我自己的解决方案(使用无意义的常数组by子句),并且看起来像我与以下生成的计划相同:

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

所以除非有人能提出一个简单或同等的答案,否则我认为我必须把它当作自己的回答。想法?

最佳答案
如问题所述,这种方法似乎实际上是生成最优的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)  
} 

转载注明原文:c# – 使用Linq到SQL,如何在表中找到列的最小和最大值? - 代码日志