Эффективный способ найти и заменить значения в DataColumn

У меня есть набор данных, содержащий один DataTable, и эта таблица получила 3 ​​столбца (Column1,Data,Column2) и несколько строк данных.

У меня также есть словарь, который содержит список значений, которые мне нужно искать в DataColumn и значения, которые я должен заменить исходные значения.

Я хочу искать в столбце с именем "Данные".

Следующее изображение содержит исходную таблицу данных и результирующую таблицу данных вместе со словарем, который содержит ключи и значения, которые необходимо найти и заменить.

Таблица данных

Какой самый эффективный способ выполнить эту операцию?

3 ответа

Я уверен, что есть лучший способ сделать это с помощью LinQ, но это будет делать

Dictionary<string,string> dic = new Dictionary<string,string>();
dic.Add("AAA", "A++");
dic.Add("BBB", "B++");
foreach(KeyValuePair<string, string> kvp in dic)
{
    DataRow[] sl = dt.Select("DATA='" + kvp.Key + "'");
    foreach(DataRow r in sl)
        r["DATA"] = kvp.Value;
}

Внутренний цикл foreach можно заменить выражением

 sl.ToList().ForEach(x => x.SetField<string>("DATA", kvp.Value));

но я не проверял на производительность

Вероятно, это не очень эффективно для больших наборов данных, но нужно учесть цикл по ключевым словам, а не по отдельным строкам таблицы.

Я бы справился с этим так:

DataSet ds = new DataSet();
string strNewXmls = ds.GetXml().Replace("AAA", "A++");
System.IO.StringReader srXmlStringReader = new System.IO.StringReader(strNewXmls);
ds.ReadXml(srXmlStringReader, XmlReadMode.IgnoreSchema);

Это быстрое и простое решение. Вы можете сделать это с любыми вещами во всем вашем наборе данных.

Надеюсь, поможет,

Taragneti

Перейти на простоту

foreach (DataRow row in dataSet.Tables[0].AsEnumerable())
{
  string data = row.Field<string>("Data");

  string newData = null;
  if (dict.TryGetValue(data, out newData))
  {
    row.SetField("Data", newData);
  }
}

(вам нужно добавить System.Data.DataSetExtensions к ссылкам вашего проекта)

Другие вопросы по тегам