2

時間帯ごとの生徒数をまとめた、わかりやすいレポートを作成しようとしています。私は最初にcampusnameのループから始め、次に時間、次に日、そしてhibutでしたが、それは非常に非効率的で低速でした。別のアプローチを取り、必要なすべてのデータを1回の選択で選択し、c#を使用して整理することにしました。

生データビュー

私の問題は、これを配列、リスト、または辞書やデータテーブルに入れて登録を合計し、以下のように整理するかどうかがわからないことです(モックアップ、計算されていません)。任意のガイダンスをいただければ幸いです。

フレンドリービュー

4

4 に答える 4

1

ユーザーにデータを表示するだけでよい(編集しない)必要がある場合は、レポートを作成することをお勧めします。

それ以外の場合、合計のみが必要な場合は、ですべてのデータを取得してIEnumerableを呼び出すことができます.Sum()。また、colinsmithが指摘しているように、Linqを並行して使用できます。

ただし、明確なことが1つあります...データが多い場合は、多くのクエリを実行する必要はありません。SQLでクエリを使用するかsum(データがデータベースに格納されている場合)、フェッチしたコレクションから合計を行うことができます。

ループでデータをフェッチする必要はありません。メモリ内のデータの処理は、データベースを複数回クエリしてから処理するよりもはるかに高速です。

于 2012-07-31T20:37:39.553 に答える
0

何かのようなもの

select campusname, ssrmeet_begin_time, count(ssrmeet_monday), count(ssrmeet_tue_day) ..
from the_table
group by campusname, ssrmeet_begin_time
order by campusname, ssrmeet_begin_time
/

あなたが望むものに近いはずです。カウントは値のみをカウントし、NULLはカウントしません。また、最初にすべてのデータをクライアントにフェッチするよりも数千倍高速です。データベースに分析を任せてください。データベースにはすでにすべてのデータがあります。

ところで:これらの写真の代わりに、いくつかのddlを指定し、作業するデータを含むステートメントを挿入する方が賢明です。そうすれば、より多くの人が質問に答えるのを手伝ってくれるでしょう。

于 2012-08-01T08:07:34.573 に答える
0

通常、データベースでこれを行うことをお勧めします。つまり、group byなどを使用して選択します。日に関して、最初の画像が2番目の画像とどのように関連しているかを理解するのに少し問題があるため、提供できません。例。

もちろん、オブジェクトに対してLINQを使用してC#でもこれを行うことができますが、最初にDBで解決しようとします。そうすれば、パフォーマンスと帯域幅の面で優れています。

于 2012-07-31T20:50:47.933 に答える
0

私はあなたが正確に何を求めているのかよくわかりません。しかし、私の理解から、あなたの登録を表すクラスを作成することをお勧めします

public class Enrollment
{
  public string CampusName { set;get;}
  public DateTime DateEnrolled { set;get;}
}

そして、データベースからこのクラスのコレクションへのすべての登録の詳細を取得します

List<Enrollment> enrollments=db.GetEnrollments();

これで、このコレクションに対して非常に多くの操作を実行して、目的のデータを取得できます

例:すべての登録を金曜日に行う場合

var fridaysEnrollMent = enrollments.
           Where(x => x.DateEnrolled.DayOfWeek == DayOfWeek.Friday).ToList();

AAキャンパスで登録数を確認したい場合

var fridayCount = fridaysEnrollMent .Where(d => d.CampusName == "AA").Count();
于 2012-07-31T20:52:25.553 に答える