如何由多个字段组,并得到另一场数
问题描述:
所以我们可以说我有一个简单的类象如何由多个字段组,并得到另一场数
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这样的帖子,他们都不像我的场景。
答
可以组由一个匿名对象,然后项目中的每个组选择所需的属性:
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
答
它应该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() });
我认为你曲解的SQL'COUNT '功能。如果Age是非空字段,则COUNT(Age)与COUNT(1)或COUNT(*)相同。如果你记住'COUNT(DISTINCT Age)',那是完全不同的故事。 –