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.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 文章。