2013-09-10 10 views
6

IQueryableは、IDプロパティ(列)のデータ型を返します。各ユニークIDの最初のN行だけをLinqで照会します

私は次のようにさらに(私は、クエリを評価する必要はありません)私のクエリをフィルタする:

をそれぞれユニークなIDについてnは、いくつかの任意であるメインクエリ、私はTake(n)にしたいから数。

つまり、固有IDごとに最初のn個の行だけを残したいと思います。

query = query.<FOR EACH DISTINCT ID>.Take(n); 

:私は...

var ids = query.Select(q => q.ID).Distinct(); 

を明確なID年代を得ることができますし、私は彼らの残りの部分とTake(n)ことができますが、私は2つの接続方法の困惑

受け入れられた回答は機能しますが、大きなテーブルでは遅いです。私はthis questionをフォローアップとして書きました。

答えて

6

あなたはこのようにそれを行うことができます。

query = query.GroupBy(q => q.ID).SelectMany(g => g.Take(n)); 

GroupByは、あなたがそれらをグループとして処理させ、同じID sの記録をまとめました。 SelectManyは各グループを取り、そのメンバーの数をnに制限し、結果を1つのフラットリストに戻します。

関連する問題