如何按多个字段分组并获取另一个字段的计数

本文关键字:字段 另一个 获取 何按多 | 更新日期: 2023-09-27 18:08:01

假设我有一个简单的类,比如

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

我有一个叫做personsIQueryable<Person>。我要做的是相当于

SELECT
   FirstName, 
   LastName,
   COUNT(Age) As AgeCount
FROM dbo.Persons
GROUP BY FirstName, LastName

如果我们在SQL领域。我如何在LINQ中写这个?

我看过像linq与groupby和count这样的帖子,它们都不完全像我的场景。

如何按多个字段分组并获取另一个字段的计数

您可以按匿名对象分组,然后投影每个组以选择所需的属性:

var result = persons
    .GroupBy(p => new { p.FirstName, p.LastName })
    .Select(g => new 
    {
        FirstName = g.Key.FirstName,
        LastName = g.Key.LastName,
        AgeCount = g.Count()
    });

应该是这样的:

persons.GroupBy(p => new { p.FirstName, p.LastName })
.Select(p => new { 
p.Key.FirstName, 
p.Key.LastName, 
AgeCount = p.Where(p1 => p1.Age != null).Select(p1 => p1.Age).Count() });