2016-09-20 9 views
3

のカウントがそれでは、私はどのように複数のフィールドをグループにして、別のフィールド

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 

となります。これをLINQに書き込むにはどうすればよいですか?

私はlinq with groupby and countのような投稿を見てきましたが、私のシナリオのようなものはありません。

+0

私はあなたがSQL 'COUNTを誤解だと思います'関数。 'Age'がnullでないフィールドである場合、' 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() }); 
関連する問題