2011-03-30 91 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