Мне нужно указать категории и количество продуктов, относящихся к каждой категории, используя 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
var result = productList.GroupBy(x => x.Category)
.Select(y => new { Category = y.Key, Count = y.Count() });
Первая группа по категории, а затем используйте Key
и Count()
чтобы получить объекты результата.
С образцами данных, которые вы предоставили, результат будет выглядеть следующим образом:
Если вы хотите получить дополнительную информацию и образцы о 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() });
Используйте следующий код мира
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() });