datatable.Compute(string) 出现未详细错误时如何正确编写?

How to properly write a datatable.Compute(string) when it gives a undetailed error?

我正在创建一个带有双打的数据 table,就像这样

我正在使用另一个依赖于用户输入的 double 来自行修复紧靠上方的 2 个和紧靠下方的 2 个行。

double razao = Variables.dadocobplanaW / Variables.alturaW;

 double min = Convert.ToDouble(DataAccess.Instance.tabelaplanaplatibandaW.Compute("MIN(Variavel)", "Variavel > " + razao.ToString()));
 double max = Convert.ToDouble(DataAccess.Instance.tabelaplanaplatibandaW.Compute("MAX(Variavel)", "Variavel < " + razao.ToString()));


 DataRow[] rows = DataAccess.Instance.tabelaplanaamansardadaW.Select("Variavel = " + min.ToString() + " OR " + "Variavel = " + max.ToString());

我已经重新验证了 table 及其名称,一切正常,代码运行,但是当我将值输入 razao 时,程序会在尝试时崩溃找到 minmax

是否因为我有 2 行在每种情况下都具有相同的 Variavel

有什么提示吗?

编辑:这是错误信息

问题可能是razao.ToString(), min.ToString(), max.ToString()的格式不正确引起的;检查这些字符串中的分隔符。我想应该是'.'
如果有逗号',';试试这个 razao.ToString(CultureInfo.InvariantCulture)

我认为你的问题是关于 compute() 方法使用的解析表达式。

您可以使用下面的代码验证它,看来您不需要双打!

String min = DataAccess.Instance.tabelaplanaplatibandaW.Compute("MIN(Variavel)", String.Format(@"Variavel > {0}", razao.ToString())).ToString();

之后需要找到compute()方法的后台代码。 该方法使用表达式解析器,它可能从您的 table 读取数据并将其解析到 System.Data 的节点。 DataColumn.Expression Property

问题出在过滤器部分,当 Variavelrazao 解析为 System.Double 时。

在上面 link 说:

For example, if the number in the literal is 2147483650, DataSet will first attempt to parse the number as an Int32. This will not succeed because the number is too large. In this case DataSet will parse the number as an Int64, which will succeed. If the literal was a number larger than the maximum value of an Int64, DataSet will parse the literal using Double. Real literals using scientific notation, such as 4.42372E-30, are parsed using System.Double.

无论如何你可以改变你的方式,从数据库中获取最小值和最大值。 那个我平时用的。