2013-09-10 14 views
6

Bir IQueryable Sayolum bir ID özelliği (sütun) içeren bir veri türü döndürecektir. n bazı keyfi ana sorgudan benzersiz her ID içinHer benzersiz kimlik için yalnızca ilk N satırı için Linq sorgusu

, ben Take(n) istiyorum: ben daha benim sorgu aşağıdaki gibi (Ben sorguyu değerlendirmek istemiyorum ) filtre uygulamak istediğiniz

numara.

Bu, her benzersiz kimlik için yalnızca ilk n satırını tutmak istiyorum.

ben ayrı ID 's alabilirsiniz ...

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

ve ben kalanlarla can Take(n), ama iki bağlayan stumped:

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

Kabul edilen cevap işe yarar, ancak büyük bir tablo için yavaştır. Takip olarak this question yazdım.

cevap

6

Böyle yapabilirsiniz:

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

GroupBy bir grup olarak işlemek izin, özdeş ID s ile kayıtlarını bir araya getiren; SelectMany her grubu alır, üye sayısını n ile sınırlar ve sonuçları tek bir düz listesine geri koyar.