我在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行解析这个并且不想在性能上妥协。其他最好的方法是什么?
答案 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]);
}
}