【发布时间】:2019-09-14 08:02:45
【问题描述】:
我正在尝试在数据表上使用 .Compute,它只计算一组行的平均值。我查看了 Microsoft 文档并搜索了一段时间,但找不到过滤器对数据表结构起作用的位置。寻找类似的东西:-
string connectStatement = "SELECT Price FROM PData WHERE Code = '" + this.ItemCode + "' ORDER BY TradeDate DESC OFFSET 0 ROWS FETCH NEXT 300 ROWS ONLY";
DataTable itemsDT = ConnectionManager.GetTable(connectStatement);
Records20 = (decimal)itemsDT.Compute("Avg(Price)", "Rows > 16 AND Rows < 23");
它在使用空过滤器时有效,但会根据所有数据进行计算。
如果这是不可能的,我正在考虑使用循环和求和来计算平均值。
编辑:我正在查看某个时间点的数据样本,并将其任一侧的范围取平均值(例如,第 20 个区间和第 17 - 22 行)
错误信息是 $exception {"找不到列 [Rows]。"} - System.Data.EvaluateException
样本数据(限于前 30 行):
价格 6464.100, 6426.800, 6406.100, 6349.300, 6329.600, 6295.500, 6247.900, 6189.100, 6206.100, 6214.600, 6231.000, 6130.200, 6115.700, 6129.500, 6097.300, 6159.600, 6149.700, 6118.400, 6156.700, 6118.800, 6054.700, 6014.700, 6198.000, 6242.800, 6272.900, 6250.700, 6213.500, 6207.000, 6184.200, 6333.200
【问题讨论】:
-
您收到什么错误信息?您的数据结构是什么,请您添加一些示例数据。
-
嗨,彼得。我刚刚按要求更新了信息。如上所述,如果无法在 .Compute 函数中过滤,我将使用循环并从那里计算平均值。感谢您的关注...
-
它将
Rows解释为字段名;指定行数的查询将不起作用。我不熟悉Compute,但我不认为你可以那样使用它。 -
简单的 WHERE : itemsDT.AsEnumerable().Where((x,index) => (index > 16) && (index