Как лучше использовать GroupBy в LINQ?
Всем привет,
Мы часто используем LINQ. Это очень продвинутая технология запросов. Хочу пояснить на одном примере.
В первую очередь наши модели;
public class UpdateBasketRequest { public string BuyerId { get; set; } public IEnumerable<UpdateBasketRequestItemData> Items { get; set; } } public class UpdateBasketRequestItemData { public string Id { get; set; } // Basket id public int ProductId { get; set; } // Catalog item id public int Quantity { get; set; } // Quantity public UpdateBasketRequestItemData(string Id, int ProductId, int Quantity) { this.Id = Id; this.ProductId = ProductId; this.Quantity = Quantity; }
Основная часть это:
UpdateBasketRequest data = new UpdateBasketRequest(); data.BuyerId = "1"; data.Items = new List<UpdateBasketRequestItemData> { new UpdateBasketRequestItemData("1", 1, 2), new UpdateBasketRequestItemData("1", 2, 2), new UpdateBasketRequestItemData("1", 3, 5), new UpdateBasketRequestItemData("2", 2, 5) }; //Id, ProductId, Quantity var itemsCalculated = data .Items .GroupBy(x => x.ProductId, x => x, (k, i) => new { productId = k, items = i }) .Select(groupedItem => { var item = groupedItem.items.First(); item.Quantity = groupedItem.items.Sum(i => i.Quantity); return item; }); foreach (var i in itemsCalculated) { Console.WriteLine(i.Id); Console.WriteLine(i.ProductId); Console.WriteLine(i.Quantity); Console.WriteLine("*****"); }
По сути, любой покупатель может иметь несколько корзин, может положить любой продукт, также каждый продукт может быть несколькими.
В нашем примере есть покупатель.
У этого покупателя 2 корзины.
В первой корзине 2 товара с номером 1, 2 товара с номером 2 и 5 товаров с номером 3.
Во второй корзине 5 товаров товара номер 2.
Все товары группируются по productId. Когда мы группируем с идентификатором продукта, результатом является идентификатор продукта и количество продуктов.
product id:1 Quantity: 2 ***** product id:2 Quantity: 7 ***** product id:3 Quantity: 5 *****
Удачи.
Этот пример на моем github; https://github.com/taskinbinbir/LinqGroupByApp
Вы можете следить за моим списком Entity Framework и LINQ, чтобы узнать больше; https://taskinbinbir.medium.com/list/entity-framework-0a2b9ee4b7c3
ссылка; https://github.com/dotnet-architecture/eShopOnContainers