2009-07-10 10 views
13

Qual è uguale di sotto SQL in LINQLinq (MIN && MAX)

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

??

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

Grazie

risposta

18

Si può solo fare

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

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

È inoltre possibile utilizzare le funzioni di aggregazione, se si desidera (esempio in VB)

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

di utilizzare più aggregati in Da Linq a SQL, su un tavolo, senza il raggruppamento, l'unico modo che ho trovato per evitare di fare più query, è quello di fare una "gruppo falso":

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

Kinda hacky, ma l'SQL generato è pulito, e così facendo, si fanno solo una query per il database.

+0

+1 interessante! – womp

+0

solo per farti sapere: "group by 1" non funziona con NHibernate 3.2 – devio