2011-06-24 29 views
0

それぞれが所有者とドキュメントタイプを持つ配列のドキュメントデータベースを持っており、特定のユーザーの5つの最も一般的なドキュメントタイプのリストを取得しようとしています。LinqからSqlへグループ化されたデータを集計する

var docTypes = _documentRepository.GetAll() 
        .Where(x => x.Owner.Id == LoggedInUser.Id) 
        .GroupBy(x => x.DocumentType.Id); 

これは、特定の所有者に属するすべての文書を返し、私はそれらを必要としてグループ化された、私は今、最も一般的なドキュメントタイプのIDを抽出する方法が必要です。私はあまりにSQLにLinqに精通していないので、任意の助けが素晴らしいだろう。

答えて

1

このカウント下降し、それらのトップ5を取る、あなたは別の番号に適応することができたり、そのあなたのケースでは必要ない場合は、完全にTake()を取ることにより、グループを注文します:ちょうどに

var mostCommon = docTypes.OrderByDescending(x => x.Count()).Take(5); 

トップ文書キーを選択します。

var mostCommonDocTypes = docTypes.OrderByDescending(x => x.Count()) 
           .Select(x=> x.Key) 
           .Take(5); 

あなたはまた、当然ちょうどこの答えではわかりやすくするために分離、それを連鎖/追加することで、あなたの元のクエリでこれを組み合わせることができます。

1

Selectを使用すると、グループ化のキー(Id)から値を取得し、次にグループ化の各項目の数を取得できます。

var docTypes = _documentRepository.GetAll()     
.Where(x => x.Owner.Id == LoggedInUser.Id)     
.GroupBy(x => x.DocumentType.Id) 
.Select(groupingById=> 
    new 
    { 
    Id = groupingById.Key, 
    Count = groupingById.Count(), 
    }) 
.OrderByDescending(x => x.Count); 
関連する問題