2014-02-12 68 views
0

在DataTable中,我試圖找到特定的字符串條目以替換或更新它們。查找並替換DataTable中選定列的所有行中的特定條目

但是,它只能用於特定列(數據類型是字符串)。

我需要的是使用它們的名稱或標題選擇所有這些列,然後用特定條件查找並替換/更新這些列的所有字符串。

E.g.使用名稱選擇列(名稱位於List<string>string[]),然後在字符串的開頭搜索包含%的每個字符串,並將其替換爲@

類似的嘗試與SQL將select col,replace(col,'%','@') from dtTable where col like '@%'

我試圖做到這一點在一個LINQ查詢,但沒有成功爲止。任何LINQ的例子都會很有幫助。

+0

你能添加代碼示例所以它可能是比較容易回答 –

回答

1

LINQ應該只用於查詢集合不要修改它們。使用簡單循環和DataRow.Field + DataRow.SetField這是強類型和支​​持nullables:

List<string> colsToUpdate = new List<string> { "Column1", "Column2", "..." }; 
foreach (DataRow row in table.Rows) 
{ 
    foreach (String colName in colsToUpdate) 
    { 
     string oldValue = row.Field<string>(colName); 
     if(oldValue.StartsWith("%")) 
      row.SetField(colName, "@" + oldValue.Substring(1)); 
    } 
} 
+0

事實上,我同意。 在將這些字符串插入DataTable時,我已經這樣做了。但是,對於每個條目(有大量數據要加載),這個過程要慢一些。這就是爲什麼我一直在尋找可以做到這一點的東西,就像我們用單個列的SQL查詢一樣。 'select col,從dtTable替換(col,'%','@'),其中col就像'@%'' – Indigo

+0

@ChP:這是更新已經填充的'DataTable'的最有效方法。當然,首先避免無效數據總是更有效率,例如通過使用不同的sql(如果數據來自數據庫)。我懷疑你試圖在錯誤的地方進行優化。 –

+0

謝謝,這是正確的。我可以嘗試分別對每列進行此操作(如果可以一次性更換所有條目)。或者,你提到的過程工作得很好,或者我可以在加載數據時繼續我正在做的事情。實際上,這些數據來自API,我無法控制。 – Indigo

相關問題