2011-03-30 81 views
1

现行规范的表达:如何计算一个数据表

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

回答

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"]; 

结果:val4预期。
让我们尝试别的东西:

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"]; 

结果:val22

结论:你ID列是字符串类型,但它需要一个数字类型,而不是否则使用字符串连接。

更新:如果你不能(或不愿)设置列的数据类型,那么你可以使用Convert表达内:2 * Convert(ID, 'System.Int32')

+0

@ ChrableWue-这里的问题是,我使用一个XML文件和XML中的数据集合到数据表中。在核心应答表上,我试图计算表达式。它应该是一个通用代码,我怎样才能为它设置数字类型。 – psobhan 2011-03-30 07:31:21

+0

我更新了我的答案 – ChrisWue 2011-03-30 07:35:13