数据表中列的C#最大值

时间:2018-09-17 14:44:38

标签: c#

我正在尝试获取数据表中一列(尤其是第一列)的最大值,这是我的代码:

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上。

该如何纠正?

在此先感谢您提供的帮助。


1 个答案:

答案 0 :(得分:0)

DataTable.Compute方法返回一个 object ,您必须在使用前将其强制转换为正确的类型。

该错误说明了问题所在。但是,代码的编写方式很难理解是哪个语句导致的。

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}])", "");