For this one, I'm trying to write a short series, aiming for 1 blog post every 1-2 weeks. I'll cover LINQ topics continuously until I run out of ideas. And this week about grouping
In LINQ, grouping is the operation of putting data into groups so that the elements in each group share a common attribute. you learn by the example below
Simple Grouping
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { // Sample data List<string> words = new List<string> { "apple", "banana", "apricot", "blueberry", "cherry" }; // Group words by their first letter var groupedWords = words.GroupBy(word => word[0]); // Display the results foreach (var group in groupedWords) { Console.WriteLine($"Key: {group.Key}"); foreach (var word in group) { Console.WriteLine($" {word}"); } } } }
Multiple Group-By
my example Group products By Category / Type
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { // Sample data List<Product> products = new List<Product> { new Product { Category = "Fruit", Type = "Citrus", Name = "Orange" }, new Product { Category = "Fruit", Type = "Berry", Name = "Strawberry" }, new Product { Category = "Vegetable", Type = "Root", Name = "Carrot" }, new Product { Category = "Vegetable", Type = "Leafy", Name = "Lettuce" }, new Product { Category = "Fruit", Type = "Citrus", Name = "Lemon" } }; // Group products by Category and then by Type var groupedProducts = products .GroupBy(p => p.Category) .Select(g => new { Category = g.Key, Types = g.GroupBy(p => p.Type) }); // Display the results foreach (var categoryGroup in groupedProducts) { Console.WriteLine($"Category: {categoryGroup.Category}"); foreach (var typeGroup in categoryGroup.Types) { Console.WriteLine($" Type: {typeGroup.Key}"); foreach (var product in typeGroup) { Console.WriteLine($" Product: {product.Name}"); } } } } public class Product { public string Category { get; set; } public string Type { get; set; } public string Name { get; set; } } }
Group-Join: Connecting Related Data
Like SQL Join connects related data from two collections using a groupjoin, specifically, it connects customers with their orders.
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { // Sample data List<Customer> customers = new List<Customer> { new Customer { CustomerId = 1, Name = "Alice" }, new Customer { CustomerId = 2, Name = "Bob" } }; List<Order> orders = new List<Order> { new Order { OrderId = 1, CustomerId = 1, Product = "Laptop" }, new Order { OrderId = 2, CustomerId = 1, Product = "Mouse" }, new Order { OrderId = 3, CustomerId = 2, Product = "Keyboard" } }; // Group-Join: Connecting customers with their orders var customerOrders = customers.GroupJoin( orders, customer => customer.CustomerId, order => order.CustomerId, (customer, customerOrders) => new { CustomerName = customer.Name, Orders = customerOrders }); // Display the results foreach (var customerOrder in customerOrders) { Console.WriteLine($"Customer: {customerOrder.CustomerName}"); foreach (var order in customerOrder.Orders) { Console.WriteLine($" Order: {order.Product}"); } } } public class Customer { public int CustomerId { get; set; } public string Name { get; set; } } public class Order { public int OrderId { get; set; } public int CustomerId { get; set; } public string Product { get; set; } } }
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.