在DataTable C中操作列#

时间:2014-11-11 12:04:02

标签: c# datatable

我在C#中使用DataTable并尝试操作,修改其中一个列。考虑下面的示例数据

Id     City Temperature
-------------------
1       A   -12

2       B    23

3       C    12

转换后我希望得到以下结果,其中将Minus转换为M,将正值转换为P

Id     City Temperature
-------------------------
1       A    12M

2       B    23P

3       C    12P

我可以使用LINQ来实现这一点吗...用大约50k行解析这个并且不想在性能上妥协。其他最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

如果列是string而不是double / int

foreach(DataRow row in table.Rows)
{
    string temp = row.Field<string>("Temperature");
    bool negative = temp.StartsWith("-");
    temp = negative ? temp.Substring(1) + "M" : temp + "P";
    row.SetField("Temperature", temp);
}    

如果列类型为double - 如上所述 - 您必须创建新的DataTable。在DataType填充数据后,您无法更改Datatable

DataTable newTable = table.Clone();
int ordinal = newTable.Columns.IndexOf("Temperature");;
newTable.Columns.Remove("Temperature");  // remove double-column
DataColumn tempCol = newTable.Columns.Add("Temperature"); // string
tempCol.SetOrdinal(ordinal); 
foreach (DataRow row in table.Rows)
{
    DataRow newRow = newTable.Rows.Add();
    foreach(DataColumn col in newTable.Columns)
    {
        if (col == tempCol)
        {
            double temp = row.Field<double>("Temperature");
            bool negative = temp < 0;
            double abs = Math.Abs(temp);
            string newTemp = negative ? abs.ToString() + "M" : abs.ToString() + "P";
            newRow.SetField(col, newTemp);
        }
        else
            newRow.SetField(col, row[col.ColumnName]);
    }
}