0

過去 5 日間の午前 7 時から午後 7 時までの 15 分ごとに値を返す sproc があります。戻り値は次のようになります。

TheDate                 TheValue
2013-10-06 07:15:00.000 0
2013-10-06 07:30:00.000 0
2013-10-06 07:45:00.000 0
2013-10-06 08:00:00.000 0
2013-10-06 08:15:00.000 0
2013-10-06 08:30:00.000 0
2013-10-06 08:45:00.000 0
2013-10-06 09:00:00.000 0
2013-10-06 09:15:00.000 0
2013-10-06 09:30:00.000 0
2013-10-06 09:45:00.000 0
2013-10-06 10:00:00.000 0
2013-10-06 10:15:00.000 0
2013-10-06 10:30:00.000 0
2013-10-06 10:45:00.000 0
2013-10-06 11:00:00.000 0
2013-10-06 11:15:00.000 0
2013-10-06 11:30:00.000 0
2013-10-06 11:45:00.000 0
2013-10-06 12:00:00.000 0
2013-10-06 12:15:00.000 0
2013-10-06 12:30:00.000 0
2013-10-06 12:45:00.000 0
2013-10-06 13:00:00.000 0
2013-10-06 13:15:00.000 0
2013-10-06 13:30:00.000 0
2013-10-06 13:45:00.000 0
2013-10-06 14:00:00.000 0
2013-10-06 14:15:00.000 0
2013-10-06 14:30:00.000 0
2013-10-06 14:45:00.000 0
2013-10-06 15:00:00.000 0
2013-10-06 15:15:00.000 0
2013-10-06 15:30:00.000 0
2013-10-06 15:45:00.000 0
2013-10-06 16:00:00.000 0
2013-10-06 16:15:00.000 0
2013-10-06 16:30:00.000 0
2013-10-06 16:45:00.000 0
2013-10-06 17:00:00.000 0
2013-10-06 17:15:00.000 0
2013-10-06 17:30:00.000 0
2013-10-06 17:45:00.000 0
2013-10-06 18:00:00.000 0
2013-10-06 18:15:00.000 0
2013-10-06 18:30:00.000 0
2013-10-06 18:45:00.000 0
2013-10-06 19:00:00.000 0
2013-10-07 07:15:00.000 0
2013-10-07 07:30:00.000 0
2013-10-07 07:45:00.000 0
2013-10-07 08:00:00.000 0
2013-10-07 08:15:00.000 0
2013-10-07 08:30:00.000 2
2013-10-07 08:45:00.000 11
2013-10-07 09:00:00.000 21
2013-10-07 09:15:00.000 28
2013-10-07 09:30:00.000 15
2013-10-07 09:45:00.000 11
2013-10-07 10:00:00.000 26
2013-10-07 10:15:00.000 1
2013-10-07 10:30:00.000 18
2013-10-07 10:45:00.000 31
2013-10-07 11:00:00.000 28
2013-10-07 11:15:00.000 22
2013-10-07 11:30:00.000 28
2013-10-07 11:45:00.000 32
2013-10-07 12:00:00.000 34
2013-10-07 12:15:00.000 29
2013-10-07 12:30:00.000 23
2013-10-07 12:45:00.000 0
2013-10-07 13:00:00.000 1
2013-10-07 13:15:00.000 20
2013-10-07 13:30:00.000 32
2013-10-07 13:45:00.000 30
2013-10-07 14:00:00.000 32
2013-10-07 14:15:00.000 21
2013-10-07 14:30:00.000 19
2013-10-07 14:45:00.000 23
2013-10-07 15:00:00.000 33
2013-10-07 15:15:00.000 3
2013-10-07 15:30:00.000 22
2013-10-07 15:45:00.000 42
2013-10-07 16:00:00.000 32
2013-10-07 16:15:00.000 34
2013-10-07 16:30:00.000 27
2013-10-07 16:45:00.000 18
2013-10-07 17:00:00.000 5
2013-10-07 17:15:00.000 0
2013-10-07 17:30:00.000 0
2013-10-07 17:45:00.000 1
2013-10-07 18:00:00.000 0
2013-10-07 18:15:00.000 0
2013-10-07 18:30:00.000 0
2013-10-07 18:45:00.000 0
2013-10-07 19:00:00.000 0

これは 2 日間です。実際の sproc は 5 日間の価値を返しますが、すべてその形式です。

とにかく、返されたすべての日の平均値を毎回取得する必要があります。したがって、7:15、7:30 などの平均値です。

DateTimes のリストに保存されている、午前 7 時から午後 7 時までの 15 分刻みのすべての一意の時刻のリストがあります。

List<DateTime> time = new List<DateTime>();

foreach (DateTime a in time)
     Console.WriteLine(a.TimeOfDay);

sproc から返されたデータは、DataSet 内の DataTable に保存されます。私はこれに似たようなことをしたいと思っていましたが、Where句に重要なコンポーネントが欠けていることを除いて、誰かが助けてくれたらとても感謝しています!

        List<int> blah = new List<int>();

        foreach (DateTime a in time)
        {
            blah.Add(Convert.ToInt32(ds.Tables[0].AsEnumerable()
                                                 .Where(w => /* **NOTE** */)
                                                 .Average(g => Convert.ToInt32(g["TheValue"]))));
        }

**注 - 日付に関係なく、時刻が 7:15 のすべての行または時刻が 7:30 のすべての行を取得するには、ここに何を配置するかを理解する必要があります。

では、5 日間すべての TIME の値を平均化するための最良の方法について何か提案はありますか?

ありがとう!:)

4

1 に答える 1

3

時間のリストを 15 分刻みで事前に計算する必要はありません。proc によって返されたすべてのデータから時刻ごとに平均したいだけの場合は、次のような LINQ クエリを使用して実行できます。

using System;
using System.Data;
using System.Linq;

...

var results = from row in ds.Tables[0].AsEnumerable()
    group row by ((DateTime) row["TheDate"]).TimeOfDay
    into g
    select new
            {
                Time = g.Key,
                AvgValue = g.Average(x => (int) x["TheValue"])
            };

次に、結果を列挙して、時間とその時間の平均値を表示できます。

于 2013-10-14T02:43:47.810 に答える