2014-11-26 4 views
0

У меня есть DataTable, и я хочу обновить его запись. Я хочу обновить запись для нескольких столбцов, и я хочу написать для нее метод расширения. Я не уверен, какой параметр он примет и что он вернет. Мой кодМетод расширения для анонимного типа

public static class ExtensionClass 
{ 
    public static IEnumerable<object> UpdateColumns(this IEnumerable<object> e, List<string> columns, List<object> values) 
    { 
     int index = 0; 
     var rec = e.First(); 
     foreach (string col in columns) 
     { 

     } 
    } 
} 

Я не получаю вещи, как SetField() на rec. Что мне не хватает?

+0

Вы считали динамику? http://msdn.microsoft.com/en-GB/library/dd264736.aspx – Vladimirs

+1

Ну, тип 'rec' - это' object' ... и 'object' не имеет метода' SetField' - это не ясно, почему вы ожидаете этого. Кроме того, анонимные типы неизменяемы в любом случае ... –

+1

'rec' имеет тип' object', поэтому вы имеете доступ только к членам 'object'. Непонятно, почему вы написали метод расширения для 'IEnumerable ', если вы хотите, чтобы это было для 'DataTable', первое, что я хотел бы сделать, это cahnge вы первый параметр для этой таблицы DataTable. –

ответ

0

У меня есть DataTable, и я хочу, чтобы обновить его ...

Итак, вы хотите, чтобы написать метод расширения для вашего DataTable.

Я хочу, чтобы обновить запись для нескольких столбцов ...

И я думаю, что вы хотите обновить значение столбца для всех строк DataTable к определенному значению. Я могу предложить вам использовать IDictionary<string, TValue> вместо отдельных списков, как List<string> columns, List<object> values, то метод расширения может быть что-то вроде этого:

public static void UpdateColumns<TValue>(this DataTable dataTable, 
    IDictionary<string, TValue> columnValuePair) 
{ 
    foreach (DataRow dataRow in dataTable.Rows) 
    { 
     foreach (var pair in columnValuePair) 
     { 
      dataRow[pair.Key] = pair.Value; 
     } 
    } 
} 

И называть это так:

var columnValuePair = new Dictionary<string, string> 
{ 
    {"ColumnName1", "newValue1" }, 
    {"ColumnName2", "newValue2" } 
}; 

yourDataTable.UpdateColumns(columnValuePair); 

Обратите внимание, что вы не Не нужно возвращать DataTable в результате этого метода расширения и установить его на yourDataTable.

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