2009-07-10 16 views
13

Lo que es igual de abajo SQL en LINQLINQ (MIN MAX &&)

select MIN(finishTimestamp) AS FromDate, MAX(finishTimeStamp) AS ToDate From Transactions 

??

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

Gracias

Respuesta

18

Usted sólo puede hacer

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

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

También puede utilizar las funciones de agregado si quieres (Ejemplo en VB)

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

para usar varios agregados en Linq a SQL, en una tabla, sin agrupar, el único manera que he encontrado para evitar hacer varias consultas, es hacer una "falsa grupo ":

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) 
     }; 

Un poco hacky, pero el SQL generado es limpio, y al hacerlo, se hacen sólo una consulta a la base de datos.

+0

+1 ¡muy interesante! – womp

+0

solo para hacerle saber: "agrupar por 1" no funciona con NHibernate 3.2 – devio

Cuestiones relacionadas