まず、前後関係を説明します。
次のようなデータがあります。
- ランナー1 | 日付1 | 時間 1 | ラップ1 | 時間 2 | ラップ2 | ... | タイム50 | ラップ50
- ランナー1 | 日付 2 | 時間 1 | ラップ1 | 時間 2 | ラップ2
- ランナー1 | 日付3 | 時間 1 | ラップ1 | ... | 時間32 | 32周
意味: ランナーの合計時間と周回数は、日付ごとに異なります。
SQL データベースの作成方法のモックアップを次に示します。
(ASCII アートで申し訳ありませんが、それは私の最初の質問です)
|Runner | |RunnerTimes | |Time |
|RunnerID|-----|RunnerTimesID |----|TimeID |
|RunnerID | |Laps |
|TimeID | |Duration|
|Date |
私の問題は、データベースの前に作成されたコードがあることです:
public class iRunner
{
public int[] laps;
public TimeSpan[] duration;
}
public static class RunnerFunctions
{
public static double AverageLaps(iRunner runner)
{
return runner.laps.Average();
}
}
したがって、次を使用してすべてのランナー データを取得できます。
Runner runner = dbContext.Runner.Where(item=>item.RunnerID == 1);
次に、クラス形式に「変換」する必要があります。
iRunner r = new iRunner();
r.Laps = runner.RunnerTimes.Select(a=>a.Laps).toArray();
r.Duration = runner.RunnerTimes.Select(a=>a.Duration).toArray();
そして、既存のメソッドを実際に呼び出すことができます。
Double average = RunnerFunctions.Average(runner);
背景がわかったところで、私の質問は次のとおりです。
- それは SQL でデータをモデル化する正しい方法ですか?
- SQL 構造を既存のクラスや関数に「変換」するより良い方法はありますか?
いくつかの追加データ:
- 上に示した構造は偽物ですが、実際の構造に似ています
- 1 つのテーブルで 3,000 エントリを変換しています。データベースからすべてのデータを取得するには 500 ミリ秒かかりますが、既存のクラス構造に変換するには約 4 分かかります。
ありがとうございました!