2013-09-10 4 views
6

IQueryableID 속성 (열)이있는 데이터 유형을 반환한다고 가정 해보십시오. n는 어떤 임의의 메인 쿼리에서 각각의 고유 한 ID를 들어각 고유 ID의 첫 번째 N 행에 대해서만 Linq 쿼리

를, 내가 Take(n) 원하는 : 내가 더 내 쿼리를 다음과 같이 (I 쿼리을 평가하지 않으 )를 필터링 할

번호.

즉 각 고유 ID에 대해 첫 번째 n 행만 유지하려고합니다.

나는 별개의 ID 년대를 얻을 수 있습니다 ...

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

나는 그들 중 나머지 수 Take(n),하지만 난 두 개의 연결에 난처한 해요 :

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

허용되는 대답은 작동하지만 큰 테이블의 경우 느립니다. 나는 후속 조치로 this question를 썼다.

답변

6

당신은 이런 식으로 작업을 수행 할 수 있습니다

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

GroupBy 당신이 그룹으로 처리시키는 동일한 ID들과 기록을 함께 제공합니다; SelectMany은 각 그룹을 가져 와서 구성원 수를 n으로 제한하고 그 결과를 하나의 단순 목록으로 되돌립니다.

관련 문제