1

我有一个包含一个 DataTable 的数据集,该表有 3 列(Column1、Data、Column2)和多个数据行。

我还有一个字典,其中包含我需要在 DataColumn 中搜索的值列表以及我应该替换原始值的值。

我想在名称为“数据”的列中搜索。

下图包含原始数据表和生成的 DataTable 以及包含需要搜索和替换的键和值的字典。

数据表

执行此操作的最有效方法是什么?

4

3 回答 3

1

我确信使用 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));

但我还没有测试过性能

对于大型数据集可能不是很有效,但应该考虑的是循环字典键而不是表的单行。

于 2013-06-27T08:29:21.910 回答
0

我会这样处理:

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);

这是一个快速而简单的解决方案。您可以对整个 DataSet 中的各种内容执行此操作。

希望能帮助到你,

塔拉涅蒂

于 2013-06-27T08:21:28.840 回答
0

追求简单

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添加到您的项目引用中)

于 2013-06-27T08:19:23.250 回答