Получить топ-3 самых популярных предметов c# linq EF - PullRequest
3 голосов
/ 28 марта 2020
public class OrderItem
{
    [Key]
    public int ItemId { get; set; }
    public int ProductId { get; set; }
    public virtual Product product { get; set; }
    public int Quantity { get; set; }
}
public class Product
{
    [Key]
    public int ProductId { get; set; }
}

Вот два моих занятия. Я хочу выбрать 3 самых популярных продукта по количеству каждого продукта. Как:

[ProductTable]
1
2
3
4


[OrderItemTable]
1, 1, 20
2, 2, 10
3, 3, 5
4, 4, 100
5, 3, 25

И результат должен быть: 4, 3, 1 или список продуктов. Спасибо.

Ответы [ 2 ]

3 голосов
/ 28 марта 2020

Следующий код был протестирован и работает правильно, я надеюсь, вам поможет

var row = (from x in OrderItem
           group x by new { x.ProductId } into val
           select new
           {
               val.Key.ProductId,
               QuantitySum = val.Sum(s => s.Quantity)
           }).OrderByDescending(i => i.QuantitySum).Take(3);
3 голосов
/ 28 марта 2020

Я уверен, что это ни в коем случае не оптимально, но я считаю, что это то, что вы хотите

context.Set<OrderItem>()
.GroupBy(x=>x.ProductId)
.Select(x=>new{ProductId=x.Key, QuantitySum=x.Sum(a=>a.Quantity)})
.OrderByDescending(x=>x.QuantitySum)
.Select(x=>x.ProductId)
.Take(3)
.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...