Управление столбцом в DataTable C #

1

Я использую 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 тыс. Строк и не хочу идти на компромисс в отношении производительности. Каковы другие наилучшие способы?

  • 0
    Тип данных столбцов Temperature int ?
  • 0
    @TimSchmelter Datatype - Double
Показать ещё 7 комментариев
Теги:
datatable

1 ответ

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]);
    }
}  
  • 0
    Спасибо @TimSchmelter Посмотрим !!! +1 пометит ответ после того, как я решу это !! Еще раз спасибо!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню