Упорядочивание по одному элементу и возврат нескольких свойств в одном запросе LINQ

#c# #linq

#c# #linq

Вопрос:

У меня есть это list

         List<Order> OL = new List<Order>()
        {
            new Order("O-1","P1",200,2),
            new Order("O-2","P1",200,3),
            new Order("O-3","P1",1000,1),
            new Order("O-4","P2",200,2)
        };
  

Порядок class :

    class Order
{
    public string ID { get; set; }
    public string Product { get; set; }
    public int Price { get; set; }
    public int Quantity { get; set; }
    public int Total { get { return Price * Quantity; } }

    public Order(string _ID, string _Product, int _Price, int _Quantity)
    {
        ID = _ID;
        Product = _Product;
        Price = _Price;
        Quantity = _Quantity;
    }
    public Order()
    {

    }
}
  

Итак, я хочу вернуть имя и подсчет (количество раз, когда продукт повторяется в заказах) для каждого продукта.

Я пытался :

         var P = OL.OrderByDescending(x => x.Product.Count()).Take(2);
        MessageBox.Show(P.ElementAt(0).Product);
  

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

Ответ №1:

Как насчет:

 var groupedProducts = OL.GroupBy(o => o.Product)
                     .Select(g => new { Product = g.Key, Quantity = g.Count() })
                     .OrderByDescending(p => p.Quantity);
  

Ответ №2:

Группировать по Product , затем сортировать по Count()

 var P = OL.GroupBy(x => x.Product)
          .OrderByDescending(x => x.Count())
          .Select(g => new { Product = g.Key, Count = g.Count() });