【问题标题】:How to group by multiple fields and get the count of another field如何按多个字段分组并获取另一个字段的计数
【发布时间】:2016-09-20 18:21:27
【问题描述】:

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

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

我有一个名为persons 的IQueryable<Person>。我正在尝试做的是相当于

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

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

我看过linq with groupby and count 之类的帖子,但没有一个与我的场景完全一样。

【问题讨论】:

  • 我认为您误解了 SQL COUNT 函数。如果Age 是不可为空的字段,则COUNT(Age) 与COUNT(1) 或COUNT(*) 相同。如果您想到COUNT(DISTINCT Age),那将是完全不同的故事。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2014-06-23
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      相关资源
      最近更新 更多