2011-07-18 4 views
12

테이블에서 자주 사용되는 상위 5 개 값을 선택하여 목록으로 반환하려고합니다.LINQ를 사용하여 가장 빈번한 값 선택

var mostFollowedQuestions = (from q in context.UserIsFollowingQuestion 
           select *top five occuring values from q.QuestionId*).toList(); 

아이디어가 있으십니까?

감사

답변

29
 var mostFollowedQuestions = context.UserIsFollowingQuestion 
            .GroupBy(q => q.QuestionId) 
            .OrderByDescending(gp => gp.Count()) 
            .Take(5) 
            .Select(g => g.Key).ToList(); 
+1

감사합니다. 위대한 작품 – wardh

+1

@ redh 나는 이것이 당신에게 실제로 가장 자주 발생하는 값을 줄 수 있다고 생각합니다. 내 대답은 미묘하게 다르지만 요청한대로 가장 자주 발생합니다. –

+0

Orderby를 OrderbyDescending으로 가장 자주 변경하도록 편집 됨 – saj

22
int[] nums = new[] { 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7 }; 

IEnumerable<int> top5 = nums 
      .GroupBy(i => i) 
      .OrderByDescending(g => g.Count()) 
      .Take(5) 
      .Select(g => g.Key); 
+0

감사합니다. 매력처럼 작동합니다! – wardh

관련 문제