繁体   English   中英

数据表中列的C#最大值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM