我有一个包含一个 DataTable 的数据集,该表有 3 列(Column1、Data、Column2)和多个数据行。
我还有一个字典,其中包含我需要在 DataColumn 中搜索的值列表以及我应该替换原始值的值。
我想在名称为“数据”的列中搜索。
下图包含原始数据表和生成的 DataTable 以及包含需要搜索和替换的键和值的字典。
执行此操作的最有效方法是什么?
我有一个包含一个 DataTable 的数据集,该表有 3 列(Column1、Data、Column2)和多个数据行。
我还有一个字典,其中包含我需要在 DataColumn 中搜索的值列表以及我应该替换原始值的值。
我想在名称为“数据”的列中搜索。
下图包含原始数据表和生成的 DataTable 以及包含需要搜索和替换的键和值的字典。
执行此操作的最有效方法是什么?
我确信使用 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);
这是一个快速而简单的解决方案。您可以对整个 DataSet 中的各种内容执行此操作。
希望能帮助到你,
塔拉涅蒂
追求简单
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添加到您的项目引用中)