0

SQL Server データベースに、約 100 万のイベントを格納するイベント テーブルがあり、それぞれに dateStart、dateEnd、タイトル、評価、その他のビットが含まれています。

年のリストを表示する必要があります。各年には、評価の高い 5 つのイベントと、その年のイベントの総数が表示されます。

だから、何か...

2009 年の上位 5 つのイベント(199 件のイベントから)
- イベント A
- イベント B
- イベント C
- イベント D
- イベント E

2010 年の上位 5 つのイベント(469 件のイベントから)
- イベント F
- イベント G
- イベント H
- イベント I
- イベント J

....など

レコードの量が非常に多いため、データベースからすべてを引き出す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、Entity Framework、NHibernate(ここでのLINQサポートについてはわかりません)など(ただしこれらに限定されません)など、いくつかの可能性があります。

これらはすべて、LINQ クエリ演算子をデータベースで実行される SQL クエリに変換し、必要な情報または要求した情報のみを返します。

于 2011-03-01T22:35:29.907 に答える