2010-02-24 4 views
0

나는 키워드 목록을 가지고 있습니다.Linq2Sql, GroupBy 및 특정 개체 반환

  • 피자 (10:13 PM)
  • 우유 (10:12 PM)
  • 피자 (10:11 PM)
  • 피자 (10시 10 분 PM)
  • 우유 (10 : 오후 9시)
  • 콩 (10:08 PM)
  • 옥수수 (10:07 PM)
  • 주스 (10:06 PM)
  • foo는 (10 : 오후 5시)

이 같은 그룹을 (상위 5, 통지 foo는 원하는)이 목록에없는 :

  • 피자 (3) (10:13 PM)
  • 우유 (2) (오후 10:12)
  • 콩 (1) (10:08 PM)
  • 옥수수 (1) (오후 10:07)
  • 주스 (1) (오후 10:06)

기본적으로 다음과 같이 키워드를 그룹화 한 후 날짜순으로 나열하고 .Take (5)를 사용하십시오. 그리고 람다 표현식을 사용하여 이것을 어떻게 가능합니까? 그리고 그것들을 특정 유형의 객체로 반환하는 방법은 무엇입니까? 유형이 LatestSearch이라고 가정 해 보겠습니다. 이 쿼리와 함께 종료

UPDATE : 이것처럼

var searches = db.Searches 
      .GroupBy(s => s.Keyword) 
      .Select(g => g.OrderByDescending(o => o.CreatedDate).First()) 
      .OrderByDescending(o => o.CreatedDate) 
      .Take(5); 
+0

'만든 후 '란 무엇을 의미합니까? – SLaks

+0

아직도 무슨 뜻인지 잘 모르겠습니다. – SLaks

답변

2

:

table.Where(s => whatever) 
    .GroupBy(s => s.Keyword) 
    .Select(g => new { 
     Keyword = g.OrderByDescending(s => s.Date), 
     Count = g.Count(), 
     Date = g.Max(s => s.Date()) 
     }) 
    .OrderByDescending(s => s.Count) 
    .Take(5); 

편집 :

table.Where(s => whatever) 
    .GroupBy(s => s.Keyword) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => g.First()); 
    .Take(5); 
: 당신 만 IEnumerable<LatestSearch>을 원하는 경우, 다음 쓰기
+0

감사합니다. 대답은 SLak입니다. 내 질문을 업데이트했습니다. 혼란을 드려 죄송합니다. – Kordonme

+0

내가 뭘 찾고있는 것처럼 보입니다! 하지만 그들을 IEnumerable 로 반환하는 방법은 무엇입니까? – Kordonme

+0

그래,하지만 Count()로 주문하고 싶지는 않지만 .CreatedDate :-) – Kordonme