[英]Efficient way to Find and Replace values in DataColumn
我有一個包含一個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));
但是我還沒有測試性能
對於大數據集,可能效率不是很高,但是應該考慮的事情是在字典鍵而不是表的單行上循環。
為簡單起見
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添加到您的項目引用中)
我會這樣處理:
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中的所有內容進行處理。
希望能幫助到你,
Taragneti
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.