[英]C# Max Value of a Column in Data Table
我正在尝试获取数据表中一列(尤其是第一列)的最大值,这是我的代码:
TableData tableData = ReadTableData(Body.GetEx<string>(JsonKeys.Engine_O2Map), "O2Map");
double max_enginespeed_fc;
max_enginespeed_fc = FuelConsumptionMap.Compute(
("MAX([" + (FuelConsumptionMap.Columns[0].ColumnName + "])")), "");
foreach (System.Data.DataRow row in tableData.Rows)
{
row[0] = 0;
}
return tableData;
但是我遇到以下错误:
错误CS0266无法将类型'object'隐式转换为'double'。 存在显式转换(您是否缺少演员表?)
FuelConsumption Map是程序中存在的另一个数据表。
问题在于max_enginespeed_fc
。
我该怎么做才能纠正这个问题?
预先感谢您提供的任何帮助。
DataTable.Compute方法返回一个在使用之前必须转换为正确类型的对象 。
该错误说明了问题所在。 但是,代码的编写方式很难理解是哪个语句导致的。 这个:
double max_enginespeed_fc;
max_enginespeed_fc = FuelConsumptionMap.Compute(
("MAX([" + (FuelConsumptionMap.Columns[0].ColumnName + "])")), "");
应该改写为:
var column = FuelConsumptionMap.Columns[0].ColumnName;
var expression=String.Format("MAX([{0}])",column);
double max_enginespeed_fc;
max_enginespeed_fc = FuelConsumptionMap.Compute(expression, "");
这可以清楚地表明问题出在Compute
的返回值上。 要获得double
精度结果,需要进行一次强制转换:
var column = FuelConsumptionMap.Columns[0].ColumnName;
var expression=String.Format("MAX([{0}])",column);
var max_enginespeed_fc = (double)FuelConsumptionMap.Compute(expression, "");
使用字符串插值可以变成:
var column = FuelConsumptionMap.Columns[0].ColumnName;
var expression=$"MAX([{column}])";
var max_enginespeed_fc = (double)FuelConsumptionMap.Compute(expression, "");
甚至
var column = FuelConsumptionMap.Columns[0].ColumnName;
var max_enginespeed_fc = (double)FuelConsumptionMap.Compute($"MAX([{column}])", "");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.