1

日時と値のテーブルがあります。値は日時におけるタンクの容積です。過去 10 日間に 1 時間ごとにタンクがどれだけ満たされたか、空になったかを計算したいと考えています。

タンクは15分おきに測っていますが、今後は20分おきに測るかもしれません。LINQ を使用して計算しようとしています。

私がしたことは次のとおりです。

allDataView.RowFilter = String.Format(CultureInfo.InvariantCulture.DateTimeFormat,
    "DateOfData < #{0}# AND DateOfData > #{1}#", DateTime.Now, DateTime.Now.AddDays((-1) * daysInterval));

allDataView.Sort = "DateOfData DESC";

// making the diff between every sample during the last daysInterval days and put it into a list with these differences.
var result = allDataView.Table.AsEnumerable().Zip(allDataView.Table.AsEnumerable().Skip(1), (row1, row2) => Convert.ToDouble(row1["Value"])-Convert.ToDouble(row2["Value"]));

しかし、これらはすべての測定値の違いです。私が望むのは、その日の期間中のラウンド時間でサンプル間の差を計算することです。

例えば:

9:50   0.5
10:05  1
10:20  2
10:35  2.5
10:50  3
11:05  5

11:00 (3) にあった最新の値を取得し、10:00 (0.5) にあった最後の値を取得し、それを 3-0.5 = 2.5 としてリストに挿入し、その期間中続行します。

Linqを使ってやりたいです。それを実装する方法についての助けに感謝します。

どうもありがとう。

4

2 に答える 2

0

私はそれを作ったと思います:

var groups = from row in allDataView.Table.AsEnumerable()
                         group row by new { Convert.ToDateTime(row["DateOfData"]).Hour, Convert.ToDateTime(row["DateOfData"]).Date } into g
                         select new
                         {
                             FirstDate = g.First()["DateOfData"],
                             FirstValue = g.First()["Value"],
                             LastDate = g.Last()["DateOfData"],
                             LastValue = g.Last()["Value"]
                         };


            var result = groups.Select(grp => Convert.ToDouble(grp.FirstValue) - Convert.ToDouble(grp.LastValue));
于 2013-10-10T11:57:56.090 に答える