Linq (MIN && MAX)

Что равно ниже sql в LINQ

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

??

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

Спасибо

Ответы

Ответ 1

Вы можете просто сделать

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

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

Ответ 2

Чтобы использовать несколько агрегатов в 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)
         };

Kinda hacky, но сгенерированный SQL чист, и тем самым вы делаете только один запрос в базу данных.

Ответ 3

Вы также можете использовать агрегатные функции, если хотите (пример в VB)

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