linq 分开的 groupby
时间: 2024-05-08 15:13:57 浏览: 64
C#在LINQ中使用GroupBy
5星 · 资源好评率100%
LINQ(Language Integrated Query)是C#编程语言中的一个功能,它可以方便地对各种数据源进行查询和操作。其中,GroupBy操作可以将数据源中的元素按照指定的键分组,并返回一个包含这些分组的集合。在分组时,可以使用不同的方式进行分组,其中的一种方式就是按照某个属性值进行分组。
对于分开的GroupBy,指的是在使用GroupBy操作时,可以将分组的结果再进行分组,以得到更详细的信息。例如,可以按照某个属性值进行初步的分组,然后再按照另一个属性值将每个组内的元素再次分组。
下面是一个使用分开的GroupBy操作的示例代码:
```csharp
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
public string City { get; set; }
}
List<Person> people = new List<Person>()
{
new Person { Name = "Alice", Age = 25, Gender = "Female", City = "New York" },
new Person { Name = "Bob", Age = 30, Gender = "Male", City = "Los Angeles" },
new Person { Name = "Charlie", Age = 35, Gender = "Male", City = "New York" },
new Person { Name = "David", Age = 40, Gender = "Male", City = "Los Angeles" },
new Person { Name = "Emily", Age = 45, Gender = "Female", City = "New York" }
};
var groups = people
.GroupBy(p => p.Gender)
.Select(g => new
{
Gender = g.Key,
Cities = g.GroupBy(p => p.City)
.Select(c => new
{
City = c.Key,
Count = c.Count()
})
});
foreach (var group in groups)
{
Console.WriteLine(group.Gender);
foreach (var city in group.Cities)
{
Console.WriteLine("- {0}: {1}", city.City, city.Count);
}
}
```
在上面的代码中,首先按照Gender属性对people进行了初步的分组,然后在每个分组内部再按照City属性进行了分组。最终输出的结果如下:
```
Female
- New York: 2
Male
- Los Angeles: 2
- New York: 1
```
这个结果表示,在people中,共有两个性别(Female和Male),其中Female这个分组中有2个人居住在New York,而Male这个分组中有2个人居住在Los Angeles,1个人居住在New York。
阅读全文