Перечислите категории и количество товаров в LinQ, используя лямбда или классические выражения

2

Мне нужно указать категории и количество продуктов, относящихся к каждой категории, используя LinQ лямбда или классические выражения.

Это класс:

  class Product
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public string Category { get; set; }
        public decimal UnitPrice { get; set; }
        public int UnitsInStock { get; set; }
    }

Это список, который я использую, чтобы понять, как выглядит список.

  IEnumerable<Product> productList = new List<Product>  {
          new Product  { ProductID = 1, ProductName = "Chai", Category = "Beverages",
            UnitPrice = 18.0000M, UnitsInStock = 39 },
          new Product{ ProductID = 2, ProductName = "Chang", Category = "Beverages",
            UnitPrice = 19.0000M, UnitsInStock = 17 },
          new Product{ ProductID = 3, ProductName = "Aniseed Syrup", Category = "Condiments",
            UnitPrice = 10.0000M, UnitsInStock = 13 },
          new Product{ ProductID = 4, ProductName = "Chef Anton Cajun Seasoning", Category = "Condiments",......and so on..

У меня есть метод, который возвращает список, называемый listProd. Например, я могу получить количество продуктов в категории "Напитки" индивидуально, но таким образом я должен создать столько запросов, сколько категорий... (не хорошо)..

int query = listProd.Where(p => p.Category == "Beverages").Count();

Поэтому я хочу создать запрос примерно так:

Категория, счет (продукты, входящие в Категорию)

Напитки, 5

Приправы, 7

Теги:
linq
lambda

2 ответа

4
Лучший ответ

Вы можете использовать этот запрос LINQ

 var result = productList.GroupBy(x => x.Category)
                         .Select(y => new { Category = y.Key, Count = y.Count() });

Первая группа по категории, а затем используйте Key и Count() чтобы получить объекты результата.

С образцами данных, которые вы предоставили, результат будет выглядеть следующим образом:

Изображение 174551

Если вы хотите получить дополнительную информацию и образцы о LINQ, я рекомендую 101 образец LINQ.

редактировать

Подтверждение вашего комментария:

Вы можете использовать инструкцию Where чтобы получить только категорию, которая содержит более 4 продуктов.

var result = productList.GroupBy(x => x.Category)
                        .Where(x => x.Count() > 4)
                        .Select(y => new { Category = y.Key, Count = y.Count() });= y.Count() });
  • 0
    а как насчет ограничений, перечисляющих только те категории с более чем 4 продуктами? Я пытаюсь выяснить через 101 образец LINQ. Я новичок и, похоже, мне предстоит долгий путь
  • 0
    @AleGarcia Посмотрите мои изменения
3

Используйте следующий код мира

  IEnumerable<Product> productList = new List<Product>  {
      new Product  { ProductID = 1, ProductName = "Chai", Category = "Beverages",
        UnitPrice = 18.0000M, UnitsInStock = 39 },
      new Product{ ProductID = 2, ProductName = "Chang", Category = "Beverages",
        UnitPrice = 19.0000M, UnitsInStock = 17 },
      new Product{ ProductID = 3, ProductName = "Aniseed Syrup", Category = "Condiments",
        UnitPrice = 10.0000M, UnitsInStock = 13 },
      new Product{ ProductID = 4, ProductName = "Chef Anton Cajun Seasoning", Category = "Condiments"}


    };
        var list = (from x in productList
                    group x.Category by x.Category into g
                    select new { Category = g.Key, Count = g.Count() });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню