2014-11-11 5 views
1

Я использую DataTable в C# и пытаюсь манипулировать, изменять один из столбцов. Рассмотрим примеры данных нижеМанипуляция столбцом в DataTable C#

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

2  B 23 

3  C 12 

И после преобразования я хочу результат ниже, где я превращающего Минус М и положительных значений Р

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

2  B 23P 

3  C 12P 

Могу ли я добиться этого с помощью LINQ..Am разбора этого с вокруг 50 тыс. Строк и не хотят компрометировать производительность. Каковы другие наилучшие способы?

+0

Это тип данных 'Температура'-столбцов' int'? –

+0

@TimSchmelter Datatype - Double – Peru

+0

, поэтому вы хотите создать новый datatable с новым столбцом, где тип данных является строкой? –

ответ

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 отметит ответ после того, как я разрешу это! Еще раз спасибо!! – Peru

Смежные вопросы