Подтвердить что ты не робот

Запрос LINQ с GROUP и SUM

Пожалуйста, помогите мне разобраться с запросами LINQ с помощью GROUP и SUM.

// Query the database
IEnumerable<BestSeller> best_sellers = from bs in (db.MYDATABASE).Take(25)
                                       where bs.COMPANY == "MY COMPANY"
                                       group bs by bs.PRODCODE into g
                                       orderby g.Sum(g.MQTY)
                                       select new BestSeller()
                                       {
                                           product_code = ,
                                           product_description = ,
                                           total_quantity =  
                                      };

Я хочу:

  • Возьмите 25 лучших элементов из db.MYDATABASE
  • Группируйте все результаты с помощью bs.PRODCODE
  • Закажите его по сумме для каждого bs.PRODCODE
  • Где компания "МОЯ КОМПАНИЯ"
  • Затем передайте данные в мои объекты BestSeller()

Я запутался, потому что, как только я добавлю group в микс, моя переменная bs станет бесполезной.

4b9b3361

Ответ 1

Я смущен, потому что как только я добавляю свою группу в микс, моя переменная bs становится бесполезной.

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

var query =  from bs in db.MYDATABASE.Take(25)
             where bs.COMPANY == "MY COMPANY"
             group bs by bs.PRODCODE into g
             orderby g.Sum(x => x.MQTY)
             select new BestSeller
             {
                 product_code = g.Key,
                 product_description = g.First().DESCRIPTION,
                 total_quantity = g.Sum(x => x.MQTY) 
             };

Обратите внимание, что без указания порядка "25 лучших элементов из db.MYDATABASE" не имеют смысла. "Топ", каким образом? Возможно, вам захочется:

from bs in db.MYDATABASE.OrderByDescending(x => x.Price).Take(25)

или что-то подобное. Обратите внимание: если ни у кого из них нет компании "Моя КОМПАНИЯ", вы не получите никаких результатов...

Или, если вы хотите 25 лучших бестселлеров, вы хотите, чтобы "взять" часть в самом конце:

var query =  from bs in db.MYDATABASE
             where bs.COMPANY == "MY COMPANY"
             group bs by bs.PRODCODE into g
             orderby g.Sum(x => x.MQTY) descending
             select new BestSeller
             {
                 product_code = g.Key,
                 product_description = g.First().DESCRIPTION,
                 total_quantity = g.Sum(x => x.MQTY) 
             };
var top25 = query.Take(25);