2013-06-27 32 views
1

我有一個包含一個DataTable的數據集,該表有3列(Column1,Data,Column2)&多個數據行。查找和替換DataColumn中的值的有效方法

我也有一個字典,其中包含我需要在DataColumn中搜索的值列表以及用於替換原始值的值。

我想在名稱爲'Data'的列中進行搜索。

下面的圖片包含原始數據表格以及由此產生的DataTable以及包含需要搜索和替換的鍵和值的字典。

DataTable

什麼是執行此操作的最有效方法是什麼?

+0

在T-SQL中我會想到嗎? – BIDeveloper

+0

你到現在爲止嘗試過什麼? –

+0

我正在執行MDX查詢並獲取數據。所以我必須使用C#修改數據。我知道我檢查列名是否是「數據」,然後我可以遍歷行,然後找到並替換值。我不想去那笏 – SharpCoder

回答

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到項目的引用)

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中的各種東西來完成此操作。

希望它能幫助,

Taragneti

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

但我沒有測試過性能

對於大型數據集可能效率不高,但應該考慮的一點是在字典Keys上循環,而不是在表的單個行上循環。