2014-02-12 96 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

相关问题