我有一个带有Events表的SQL Server数据库,该表存储了大约一百万个事件,每个事件都有dateStart,dateEnd,title,rating和其他位。
我需要显示年份列表,其中每年显示5个评分最高的事件以及该年度事件的总数。
所以,像......
2009年前五大事件(来自199个事件)
- 活动A
- 活动B
- 活动C
- 活动D
- 活动E2010年前5名活动(来自469项活动)
- 活动F
- 活动G
- 活动H
- 活动I
- 事件J......等等。
由于记录的数量庞大,我想避免使用Linq查询将所有内容从数据库中删除,但我不知道这是否可行,而我的Linq知识还不足以弄清楚如何这会奏效。
从数据库中检索此数据结构的最有效方法是什么?
提前多多感谢 - 整天都在努力解决问题。
答案 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查询,并且只返回您需要或请求的信息。