C# 在查找列中的最大数值时,如何忽略列中不具有数值的数据?

C# 在查找列中的最大数值时,如何忽略列中不具有数值的数据?,c#,datatable,dbnull,C#,Datatable,Dbnull,我在数据表中有一列,通常由数字值组成,但很少有字母出现在列中的情况。这是由于定制设备进行测量,当测量超出其限制范围时,会记录一个单词或缩写。 话虽如此,但我在从列中获取最大数值时遇到了问题,因为一行或多行可能包含字母 我收到错误消息“对象无法从DBNull转换为其他类型” 这是一种处理包含字母的行并在列中查找最大数值的方法吗?您看到的错误是数据中也有空值。在试图求和的列中包含字符串数据的另一个问题是,直接使用Compute很困难。不过,您可以将数据表转换为可枚举数据表,并使用Linq对其进行操作

我在数据表中有一列,通常由数字值组成,但很少有字母出现在列中的情况。这是由于定制设备进行测量,当测量超出其限制范围时,会记录一个单词或缩写。 话虽如此,但我在从列中获取最大数值时遇到了问题,因为一行或多行可能包含字母

我收到错误消息“对象无法从DBNull转换为其他类型”


这是一种处理包含字母的行并在列中查找最大数值的方法吗?

您看到的错误是数据中也有空值。在试图求和的列中包含字符串数据的另一个问题是,直接使用
Compute
很困难。不过,您可以将数据表转换为可枚举数据表,并使用Linq对其进行操作。类似的东西可以工作…结果返回
6.25

var data = new DataTable();
data.Columns.Add("Data", typeof(string));
data.Rows.Add("1");
data.Rows.Add("2.0");
data.Rows.Add("3.25 kg");
data.Rows.Add(DBNull.Value);

var sum = data.AsEnumerable()
.Where(d => d["Data"] != DBNull.Value)
.Sum(d =>
{
    var columnData = d["Data"].ToString();
    var numericalString = new string(columnData.Where(c => char.IsDigit(c) || c == '.').ToArray());
    var numericalValue = decimal.Parse(numericalString);

    return numericalValue;
});

您看到的错误是,数据中也有空值。在试图求和的列中包含字符串数据的另一个问题是,直接使用
Compute
很困难。不过,您可以将数据表转换为可枚举数据表,并使用Linq对其进行操作。类似的东西可以工作…结果返回
6.25

var data = new DataTable();
data.Columns.Add("Data", typeof(string));
data.Rows.Add("1");
data.Rows.Add("2.0");
data.Rows.Add("3.25 kg");
data.Rows.Add(DBNull.Value);

var sum = data.AsEnumerable()
.Where(d => d["Data"] != DBNull.Value)
.Sum(d =>
{
    var columnData = d["Data"].ToString();
    var numericalString = new string(columnData.Where(c => char.IsDigit(c) || c == '.').ToArray());
    var numericalValue = decimal.Parse(numericalString);

    return numericalValue;
});

列的数据类型是什么?如果是数字(双精度或十进制),则不能包含字母:这些字母是否转换为DBNulls?或者它是一个字符串列,在这种情况下,使用max将无法正常工作?我从错误中猜测,您的所有行都包含字母,甚至可能DataTable是空的,因为您的compute语句在其他情况下通常可以正常工作。列的数据类型是什么?如果是数字(双精度或十进制),则不能包含字母:这些字母是否转换为DBNulls?或者它是一个字符串列,在这种情况下,使用max将无法正常工作?我从错误中猜测,您的所有行都包含字母,甚至可能DataTable是空的,因为您的compute语句在其他情况下通常可以正常工作。