当前代码:
foreach (Expressions e in expressionObj)
{
if ((e.Expression != null) && (e.ColumnName != null))
{
newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
}
}
我有一个ID + ID的表达式,它作为新的列添加到数据表中作为SUM-ID,其中ID = 2,但得到的结果是22而不是4。
答案 0 :(得分:4)
让我们看看:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(decimal)));
dt.Columns.Add(new DataColumn("SUM-ID", typeof(decimal), "ID + ID"));
var row = dt.NewRow();
row["ID"] = 2;
dt.Rows.Add(row);
var val = dt.Rows[0]["SUM-ID"];
结果:val
符合预期4
我们试试别的:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(string)));
dt.Columns.Add(new DataColumn("SUM-ID", typeof(decimal), "ID + ID"));
var row = dt.NewRow();
row["ID"] = "2";
dt.Rows.Add(row);
var val = dt.Rows[0]["SUM-ID"];
结果:val
为22
结论:您的ID
列的类型为字符串,但它必须是数字类型,否则使用字符串连接。
更新:如果您不能(或不想)设置列的数据类型,那么您可以在表达式中使用Convert
:2 * Convert(ID, 'System.Int32')