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

时间:2016-09-20 18:21:27

标签: c# sql .net sql-server linq

所以我想说我有一个像

这样的简单类
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

我有IQueryable<Person>名为persons。我想要做的是相当于

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

如果我们在SQL土地上。我如何在LINQ中写这个?

我查看过像linq with groupby and count这样的帖子,但这些帖子都不像我的情景。

2 个答案:

答案 0 :(得分:6)

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

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 :(得分:1)

这应该是像这样的事情:

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() });