关于c#:如何按多个字段分组并获取另一个字段的计数

How to group by multiple fields and get the count of another field

所以假设我有一个简单的班级

1
2
3
4
5
6
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

我有一个叫personsIQueryable。我想做的是

1
2
3
4
5
6
SELECT
   FirstName,
   LastName,
   COUNT(Age) As AgeCount
FROM dbo.Persons
GROUP BY FirstName, LastName

如果我们在SQL土地。我怎么用LINQ写这个?

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


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

1
2
3
4
5
6
7
8
var result = persons
    .GroupBy(p => new { p.FirstName, p.LastName })
    .Select(g => new
    {
        FirstName = g.Key.FirstName,
        LastName = g.Key.LastName,
        AgeCount = g.Count()
    });


应该是这样的:

1
2
3
4
5
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() });