使用Linq获取摘要和计数

时间:2011-03-01 22:30:53

标签: linq count execution deferred

我有一个带有Events表的SQL Server数据库,该表存储了大约一百万个事件,每个事件都有dateStart,dateEnd,title,rating和其他位。

我需要显示年份列表,其中每年显示5个评分最高的事件以及该年度事件的总数。

所以,像......

  

2009年前五大事件(来自199个事件)
    - 活动A
    - 活动B
    - 活动C
    - 活动D
    - 活动E

     

2010年前5名活动(来自469项活动)
    - 活动F
    - 活动G
    - 活动H
    - 活动I
    - 事件J

     

......等等。

由于记录的数量庞大,我想避免使用Linq查询将所有内容从数据库中删除,但我不知道这是否可行,而我的Linq知识还不足以弄清楚如何这会奏效。

从数据库中检索此数据结构的最有效方法是什么?

提前多多感谢 - 整天都在努力解决问题。

2 个答案:

答案 0 :(得分:3)

好吧,我们假设您只关心开始日期。你想要的东西是:

var query = from eventInfo in db.Events
            group eventInfo by eventInfo.dateStart.Year into g
            select
            {
                Year = g.Key, // Key for the grouping
                Count = g.Count(), // Events for this year
                Top5 = g.OrderByDescending(e => e.Rating).Take(5)
            };

坦率地说,我不知道会产生什么样的SQL,或者它的效率是否甚至模糊 - 你应该找出生成的SQL,然后查看SQL分析器以查看查询执行计划。

答案 1 :(得分:0)

你将不得不使用ORM,有几种可能性,包括(但不限于)Linq-To-Sql,实体框架,NHibernate(我不确定这里的LINQ支持)等等。

所有这些都会将LINQ查询运算符转换为将在数据库中执行的sql查询,并且只返回您需要或请求的信息。