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