📜  group-by-in-linq - C# (1)

📅  最后修改于: 2023-12-03 15:15:26.666000             🧑  作者: Mango

Group By in LINQ - C#

在使用LINQ时,Group By语句对于对数据进行分组和聚合是非常有用的。在本篇文章中,我们将学习如何在C#中使用Group By语句。

简介

Group By语句用于将数据按照某个键值进行分组。它通常用于查询类似于数据库表的数据集,这些数据通过一个或多个字段进行分组,然后可以执行聚合操作来计算每个组的数据。在使用Group By时,我们可以给它提供一个键值选择器,用于标识如何按组分组。

语法

下面是Group By语句的基本语法:

var groupedData = from item in collection
                  group item by item.Property into grouped
                  select grouped;

其中,collection是要进行分组的数据集合。Property是一个键值选择器,用于指定按哪个属性进行分组。grouped是一个新的临时集合,它用于存储分组的结果。

示例

假设我们有一个Person类,它有一个Name属性和一个Age属性。我们的数据集合包含了一些Person对象:

public class Person 
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Person> people = new List<Person>() 
{
    new Person { Name = "Tom", Age = 25 },
    new Person { Name = "Jerry", Age = 30 },
    new Person { Name = "Mike", Age = 25 },
    new Person { Name = "Sara", Age = 20 },
    new Person { Name = "Zoe", Age = 30 },
};

现在,我们想按照年龄进行分组,并计算每个年龄组的人数。使用Group By语句可以非常容易地实现这个功能:

var groupedData = from person in people
                  group person by person.Age into grouped
                  select new { Age = grouped.Key, Count = grouped.Count() };

foreach (var item in groupedData)
{
    Console.WriteLine($"Age: {item.Age}, Count: {item.Count}");
}

输出结果如下:

Age: 25, Count: 2
Age: 30, Count: 2
Age: 20, Count: 1

在上面的示例中,我们使用group person by person.Age将Person对象按照Age属性进行分组,然后使用grouped.Count()计算每个年龄组的人数。最终,我们使用select来创建一个新的匿名对象,其中包含了年龄和人数信息。

总结

Group By语句是C#中非常有用的语法,它使得我们可以按照某个键值对数据进行分组,并进行聚合操作。在使用Group By时,需要特别注意键值选择器的使用,以确保正确的分组结果。