2009-03-03 2 views
5

일부 LINQ 쿼리는 여전히 나를 혼란스럽게합니다.상단, 개수, 그룹 및 주문을 포함하는 SQL을 LINQ (2 엔티티)로 변환

테이블 '조회수'에 '페이지'와 '날짜'라는 두 개의 열이 포함 된 경우 정의 된 시간 조각에서 가장 많은 행이있는 대부분의 페이지를 찾고 싶습니다.

SQL에서 나는이 사용하는 것 : 나는 아무 생각이 얼마나 사람이 나를 여기에 도움이 될 수 있습니다,이 접근하지있어 LINQ에서

SELECT TOP 10 
     [Page] 
     ,COUNT([Page]) as Number 
FROM dbo.[Hits] 
WHERE [Date] >= CONVERT(datetime,'14 Jan 2009') 
AND [Date] < CONVERT(datetime,'15 Jan 2009') 
Group BY [Page] 
Order by Number DESC 

를? linqer를 사용하여 변환하려고했지만이 표현식에 대한 오류 만 표시합니다.

답변

7

이런 식으로 뭔가 작업을해야합니다 : 당신의 LINQ 코드를 C#에서 사용하는 경우 페이지 < maxDate -> p.Date에서

(from p in DataContext.Hits 
where (p.Date >= minDate) && (p.Date < maxDate) 
group p by p.Page into g 
select new { Page = g.Key, Number = g.Count() }).OrderByDescending(x => x.Number).Take(10); 
+0

오타가 Sam

+0

아, 그리고 물론, 하나는해야 할 것입니다 'and'대신 '&&'를 사용하십시오. VB에서 어떻게해야 할 지 몰라. – Sam

7
var top10hits = objectContext.Hits 
    .Where(h => minDate <= h.Date && h.Date < maxDate) 
    .GroupBy(h => h.Page) 
    .Select(g => new { Page = g.Key, Number = g.Count() }) 
    .OrderByDescending(x => x.Number) 
    .Take(10); 
+0

입력합니다. 선택 (g => 페이지 = g.Key, 숫자 = g.Count()}) -> .Select (g => new {Page = g.Key, Number = g.Count()}) 그렇지 않으면 "same same .. but different":) – veggerby

+0

오타를 보내 주셔서 감사합니다 - veggerby; 그리고 편집 - 정의. –

+0

또한 - @ "동일합니다 ...하지만 다르다"확장 메서드는 쿼리 이해 구문보다 더 쉽게 찾을 수 있습니다. 그래서 그것이 내가 사용하는 것입니다. –