Linq to SQL — группировка продуктов по общему заказанному количеству

#linq-to-sql #group-by #sql-order-by

#linq-to-sql #группировать по #sql-order-by

Вопрос:

Я пытаюсь получить список «популярных товаров» на сайте электронной коммерции, используя LINQ to SQL — товары упорядочены и становятся строками в таблице погашения, со столбцом количества для указания заказанного количества.

Вот соответствующие фрагменты таблиц:

Продукт

     ProductId INT
    ProductTitle VARCHAR
    (other columns not shown)
  

Выкуп

     RedemptionId INT
    ProductId INT
    Quantity INT
    (other columns not shown)
  

У меня возникли проблемы с группировкой, а затем с заказом по сумме заказанного количества. Вот что у меня есть на данный момент:

 (from product in Products
join redemption in Redemptions on product.ProductId equals redemption.ProductId
group product by new { product.ProductId, product.ProductTitle } into g
orderby g.Sum(r => r.Key.Quantity) // Quantity is not part of the key :(
select g.Key).Take(5)
  

Хотя я могу группировать товары в соединении с погашениями, я не могу делать заказ по сумме заказанных количеств.

В идеале я хочу, чтобы возвращался только объект product, а не анонимный тип, включающий количество.

Ответ №1:

Выполнение join into значительно упрощает:

 var x = (from p in products
join r in redemptions on p.ProductId equals r.ProductId into pr
orderby pr.Sum(r => r.Quantity) descending
select p).Take(5);