将包含top,count,group和order的SQL转换为LINQ(2个实体)

时间:2009-03-03 12:00:10

标签: sql linq

一些LINQ查询仍困扰着我。

对于包含两个列''Page'和'Date'的表'Hits',我想在定义的时间片段中找到包含最多行的页面。

在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 个答案:

答案 0 :(得分:7)

这样的事情应该有效:

(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);

答案 1 :(得分: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);