0

我有一个带有事件表的 SQL Server 数据库,该表存储大约一百万个事件,每个事件都有一个 dateStart、dateEnd、标题、评级和其他位。

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

所以,像...

2009 年前 5 名赛事(来自 199 场赛事)
- 赛事 A
- 赛事 B
- 赛事 C
- 赛事 D
- 赛事 E

2010 年前 5 名赛事(来自 469 场赛事)
- 赛事 F
- 赛事 G
- 赛事 H
- 赛事 I
- 赛事 J

.... ETC。

由于记录的数量庞大,我想避免将所有内容从数据库中提取出来的 Linq 查询,但我不知道这是否可能,而且我的 Linq 知识不足以弄清楚这将如何工作.

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

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

4

2 回答 2

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 分析器中查看查询执行计划。

于 2011-03-01T22:34:00.643 回答
0

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

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

于 2011-03-01T22:35:29.907 回答