System.Data.DataTable.Compute 中的语法说明

本文关键字:语法 说明 Compute Data DataTable System | 更新日期: 2023-09-27 18:32:09

首先,我有以下数字,我将其转换为字符串。

decimal numberA = 1.0M;
decimal numberB = 2.0M;
string numberAString = numberA.ToString(); // numberAString = 1,0
string numberBString = numberB.ToString(); // numberBString = 2,0

到目前为止,ToString()使用当前区域性,它在我的系统de-CH上,小数点分隔符是昏迷。

然后,我创建一个公式表达式并使用方法System.Data.DataTable.Compute计算公式

// create formula expression
string formulaExpression = "{0} + {1}";
string formula = string.Format(formulaExpression, numberAString, numberBString); 
// formula = 1,0 + 2,0
// compute formula
object result;
result = new System.Data.DataTable().Compute(formula, filter:string.Empty);

当我运行此代码时,我得到了一个System.Data.SyntaxErrorException。我认识到,Compute方法不满足逗号分隔符。当我使用.ToString(System.Globalization.CultureInfo.InvariantCulture)转换十进制值时,使用与区域无关的语言英语,因此使用十进制值的字符串表示的点分隔符并且工作正常。

我的问题是,我可以在System.Data.DataTable.Compute方法中用作表达式的此语法的名称是什么,该语法分别是所描述的允许运算符和函数在哪里?MSDN 文档没有给我太多关于此语法的信息。

System.Data.DataTable.Compute 中的语法说明

表达式语法在属性System.Data.DataColumn.Expression的 MSDN 文档中进行了描述。

您可以在 MSDN 文档 System.Data.DataTable.Compute 中的部分注释的底部找到此提示。

很高兴知道表达式语法文档中"分析文本表达式"部分中的以下语句。

所有文本表达式都必须在固定区域性区域设置中表示。当 DataSet 分析和转换文本表达式时,它始终使用固定区域性,而不是当前区域性。

因此,就我而言,我必须将小数转换为小数numberA,并使用以下重载numberB ToString以考虑固定的区域设置。

string numberAString = numberA.ToString(System.Globalization.CultureInfo.InvariantCulture); 
// numberAString = 1.0
string numberBString = numberB.ToString(System.Globalization.CultureInfo.InvariantCulture); 
// numberBString = 2.0

就我而言,有点特别的是我在已知的Windows 8.1 Bug中运行的情况。出于某种原因,小数分隔符用于昏迷de-CH区域性。这是错误的。正确的是点作为小数分隔符。 有关详细信息,请参阅此 Wiki 文章。