Linq (MIN && MAX)

14
下面的SQL在LINQ中如何对应?
select MIN(finishTimestamp) AS FromDate, MAX(finishTimeStamp) AS ToDate From Transactions

??

from t in Transactions
select new {
          FromDate = ?,
          ToDate = ?
        }

谢谢


你应该看一下更有趣的@CMS答案。 - Martin Delille
3个回答

39

要在Linq to SQL中在一个表上使用多个聚合函数,而不需要分组,我发现避免多次查询的唯一方法是创建一个“虚拟分组”:

 var q = from tr in dataContext.Transactions
         group tr by 1 into g // Notice here, grouping by a constant value
         select new
         {
           FromDate = g.Min(t => t.InvoiceDate),
           ToDate = g.Max(t => t.InvoiceDate)
         };

这种方法有点不太正式,但生成的SQL语句很干净,通过这样做,您只需向数据库发出一次查询。


只是提醒您:在 NHibernate 3.2 中,“group by 1” 不起作用。 - devio

18

您可以直接执行

var transactionDates = from t in Transactions 
                       select t.FinishTimeStamp;

var dates = new { 
                   FromDate = transactionDates.Min(), 
                   ToDate = transactionDates.Max() 
                };

0

如果需要的话,您也可以使用聚合函数(VB示例)

 Dim max = Aggregate tMax In Transactions Select tMax Into Max()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接