2016-09-20 29 views
3

所以我们可以说我有一个简单的类象如何由多个字段组,并得到另一场数

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这样的帖子,他们都不像我的场景。

+0

我认为你曲解的SQL'COUNT '功能。如果Age是非空字段,则COUNT(Age)与COUNT(1)或COUNT(*)相同。如果你记住'COUNT(DISTINCT Age)',那是完全不同的故事。 –

回答

5

可以组由一个匿名对象,然后项目中的每个组选择所需的属性:

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

如果我需要计算另一列,该怎么办?谢谢 – touinta

1

它应该somethilg这样的:

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() }); 
相关问题