使用 LINQ 计算每小时的油耗

本文关键字:每小时 LINQ 计算 使用 | 更新日期: 2023-09-27 18:34:48

我有一个日期时间和值表。该值是日期时间的储罐体积。我想计算过去 10 天内每小时填充/清空的油箱量。

我每 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 来做到这一点。感谢如何实施它的任何帮助。

多谢。

使用 LINQ 计算每小时的油耗

我想我做到了:

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));

我建议创建一个sp来处理日期时间值的分组。这应该有一个额外的好处,即允许你的查询运行得更快,然后你可以通过linq更快地提取结果。