Я использую DataTable
в С# и пытаюсь манипулировать, изменять один из столбцов. Рассмотрим примерные данные ниже
Id City Temperature
-------------------
1 A -12
2 B 23
3 C 12
И после преобразования я хочу получить результат ниже, где преобразование Минуса в M и Положительные значения в P
Id City Temperature
-------------------------
1 A 12M
2 B 23P
3 C 12P
Могу ли я достичь этого, используя LINQ..Am разбор этого с примерно 50 тыс. Строк и не хочу идти на компромисс в отношении производительности. Каковы другие наилучшие способы?
Если столбец является 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]);
}
}
Temperature
int
?