C# 如何计算数据表的表达式

C# 如何计算数据表的表达式,c#,C#,当前代码: 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作为新列添

当前代码:

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。

让我们看看:

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
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
与预期一致。
让我们试试别的:

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
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

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
结论:您的
ID
列是字符串类型,但它必须是数字类型,否则将使用字符串连接

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
更新:如果无法(或不想)设置列的数据类型,则可以在表达式中使用
Convert
2*Convert(ID,'System.Int32')
让我们看看:

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
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
与预期一致。
让我们试试别的:

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
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

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 
结论:您的
ID
列是字符串类型,但它必须是数字类型,否则将使用字符串连接

foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
} 

更新:如果无法(或不想)设置列的数据类型,则可以在表达式中使用
Convert
2*Convert(ID,'System.Int32')
@ChrableWue-这里的问题是,我使用了一个XML文件,并将XML中的数据设置到数据表中。在coresponding表中,我试图计算表达式。它应该是一个泛型代码,我如何才能将数字类型设置为它。@ChrableWue-这里的问题是,我正在使用一个XML文件,并将XML中的数据设置到数据表中。在coresponding表中,我试图计算表达式。它应该是一个通用代码,我如何才能设置它的数字类型。
foreach (Expressions e in expressionObj)
{
   if ((e.Expression != null) && (e.ColumnName != null))
   {
      newtable1.Columns.Add(new DataColumn(e.ColumnName, typeof(decimal), e.Expression));
   }   
}