所以我想说我有一个像
这样的简单类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 :(得分: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() });