Преобразование SQL, содержащего top, count, group и order, в LINQ (2 объекта) - PullRequest
5 голосов
/ 03 марта 2009

Некоторые запросы LINQ все еще меня озадачивают.

для таблицы 'Hits', содержащей два столбца, 'Page' и 'Date', я хочу найти наибольшее количество страниц с наибольшим количеством строк за определенный промежуток времени.

В SQL я бы использовал это:

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

В LINQ я понятия не имел, как к этому подойти, кто-нибудь может мне здесь помочь? Я попытался преобразовать его с помощью linqer, но он просто показывает ошибку для этого выражения.

Ответы [ 2 ]

7 голосов
/ 03 марта 2009
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);
7 голосов
/ 03 марта 2009

Примерно так должно работать:

(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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...