1. 介绍
C#中的LINQ(Language Integrated Query)是一种强大的语言特性,它允许开发人员使用统一的方式查询和操作各种数据源,包括集合、数据库和XML等。其中,GroupBy是LINQ中非常有用的一个操作,可以将集合中的元素按照指定的键分组。
2. GroupBy的用法
GroupBy方法位于System.Linq命名空间中,通过该方法可以对集合进行分组。下面是GroupBy方法的基本用法:
var groupedData = collection.GroupBy(item => item.Key);
2.1 按单个键分组
GroupBy方法接受一个委托参数,用于指定分组的键。在上述示例中,我们使用item.Key作为分组键。GroupBy方法返回一个可枚举的集合,其中每个元素都包含一个组的键和对应的元素集合。
2.2 按多个键分组
除了按照单个键分组外,GroupBy方法还支持按照多个键进行分组。我们可以使用匿名类型来指定多个键:
var groupedData = collection.GroupBy(item => new { item.Category, item.Subcategory });
上述示例中,我们按照商品的Category和Subcategory字段进行分组。
2.3 自定义结果
GroupBy方法返回的元素类型为IGrouping
var groupedData = collection.GroupBy(item => item.Category)
.Select(group => new { Category = group.Key, Count = group.Count() });
上述示例中,我们通过Select方法将分组结果投影为Category和Count字段的匿名类型。
3. 示例
假设我们有一个包含商品信息的集合,每个商品都具有Category和Price字段。我们希望将商品按照Category进行分组,并计算每个分组中商品的平均价格。下面是示例代码:
public class Product
{
public string Category { get; set; }
public decimal Price { get; set; }
}
var products = new List<Product>()
{
new Product { Category = "电子产品", Price = 1999.99 },
new Product { Category = "电子产品", Price = 2999.99 },
new Product { Category = "电子产品", Price = 3999.99 },
new Product { Category = "家居用品", Price = 199.99 },
new Product { Category = "家居用品", Price = 299.99 },
new Product { Category = "饰品", Price = 99.99 },
new Product { Category = "饰品", Price = 199.99 },
new Product { Category = "饰品", Price = 299.99 }
};
var groupedData = products.GroupBy(p => p.Category)
.Select(group => new { Category = group.Key, AvgPrice = group.Average(p => p.Price) });
foreach (var group in groupedData)
{
Console.WriteLine($"Category: {group.Category}, Avg Price: {group.AvgPrice}");
}
上述代码中,我们通过Category字段将商品进行分组,并使用Average方法计算每个分组中商品的平均价格。运行上述代码,输出结果为:
Category: 电子产品, Avg Price: 2999.99
Category: 家居用品, Avg Price: 249.99
Category: 饰品, Avg Price: 199.99
可以看到,商品已经按照Category字段进行了分组,并计算出了每个分组中商品的平均价格。
4. 总结
本文介绍了C#中使用LINQ的GroupBy方法进行分组操作的基本用法。我们可以按照单个键或多个键进行分组,并可以自定义分组结果。通过实例演示,展示了GroupBy方法的具体用法和效果。
LINQ的GroupBy方法为开发人员提供了便利的集合分组功能,能够帮助我们更方便地处理和分析数据。在实际开发中,我们可以根据具体需求灵活运用GroupBy方法,提高代码的可读性和开发效率。