簡體   English   中英

在DataColumn中查找和替換值的有效方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM