как получить прогноз агрегатов по набору - PullRequest
1 голос
/ 15 апреля 2011

запросов T-SQL, таких как:

select sum(amount), min(amount), max(amount) from sales where salesdate < getDate()

кажется трудным перевести на Linq для Entites.

На первый взгляд, я бы попробовал

var result = from s in entites.Sales where s.SalesDate < DateTime.Today
group s by 1 into g
select new { 
AmountSum = g.Sum(x=> x.amount), 
AmountMin= g.Min(x=>x.amount),
AmountMax= g.Max(x=>x.amount)}

Действительно ли это лучший способ выполнить то же самое, что делает t-sql? Очевидно, что SQL, который генерирует EF, включает в себя группу, которая дает мне момент для беспокойства.

1 Ответ

1 голос
/ 16 апреля 2011

Вы можете сделать это, изменив свой запрос - используя пример словаря, чтобы проиллюстрировать:

Dictionary<int, int> sampleDictionary = new Dictionary<int, int>();

sampleDictionary.Add(4, 5);
sampleDictionary.Add(7, 8);
sampleDictionary.Add(1, 2);

var val = new
{
    Max = sampleDictionary.Max(x => x.Key),
    Min = sampleDictionary.Min(x => x.Key),
     Sum = sampleDictionary.Sum(x => x.Key)
};

Console.WriteLine(val);
Console.ReadKey();

Выбирает максимальное, минимальное и суммарное количество ключей в новом анонимном объекте.Вы могли бы написать это как:

var set = entites.Sales.Where(x => x.SalesDate < DateTime.Today);

var val = new
{
    Max = set.Max(x => x.Key),
    Min = set.Min(x => x.Key),
    Sum = set.Sum(x => x.Key)
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...