Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修改一列并将一个数据表复制到另一个数据表_C#_Linq_Datatable - Fatal编程技术网

C# 如何修改一列并将一个数据表复制到另一个数据表

C# 如何修改一列并将一个数据表复制到另一个数据表,c#,linq,datatable,C#,Linq,Datatable,我有一个DataTable,其中包含货币对字段和其他列,如下所示 我尝试了以下方法来实现这一点 private void CopyColumns(DataTable source, DataTable dest, params string[] columns) { foreach (DataRow sourcerow in source.Rows) { DataRow destRow = dest.NewRow();

我有一个DataTable,其中包含货币对字段和其他列,如下所示

我尝试了以下方法来实现这一点

    private void CopyColumns(DataTable source, DataTable dest, params string[] columns)
    {
        foreach (DataRow sourcerow in source.Rows)
        {
            DataRow destRow = dest.NewRow();
            foreach (string colname in columns)
            {
                destRow[colname] = sourcerow[colname];
            }
            dest.Rows.Add(destRow);
        }
    }
是否可以使用select和Insert查询将一个数据表复制到另一个数据表?

private void CopyColumns(数据表源、数据表dest、参数字符串[]列)
private void CopyColumns(DataTable source, DataTable dest, params string[] columns)
{
  dest = source.AsEnumerable()
               .Select(row=> {
                   DataRow newRow = dest.NewRow();
                   newRow[columns[0]] = ((string)row[columns[0]])
                                       .Replace("USD","").Trim('/');                      
                   for(int i = 1; i < columns.Length; i++) {
                     newRow[columns[i]] = row[columns[i]];
                   }
                   return newRow;  
                }).CopyToDataTable();
}
{ dest=source.AsEnumerable() .选择(行=>{ DataRow newRow=dest.newRow(); 新行[列[0]]=((字符串)行[列[0]]) 。更换(“美元”)。修剪(“/”); for(int i=1;i
“使用选择和插入查询”是指
LINQ到数据集
?您的方法非常清晰高效,无需使用LINQ。更重要的是,LINQ是一个查询工具,而不是一个更新工具。查看屏幕截图,从源表到目标表的转换规则是什么?只需将货币对删除为单一货币即可,删除货币USD并将数据加载到第二个表中我建议将select的内部移动到它自己的方法中。@AlexBeisley你是什么意思?你的意思是把里面的东西放到一个单独的方法里?我只想这样写是为了方便。不要害怕所谓的
副作用
,这种问题可能对
LINQ到实体
不好,但对于
LINQ到数据集
,我认为这并不重要。
LINQ
的本质仍然是基于
loop
。这是一个选择,所以我知道不会有真正的副作用,但我的意思是作为一个明确的问题。在select中创建一个复杂的委托相当混乱。@AlexBeisley当然,但我认为这还不够混乱,当代码至少比现在长2倍时,我会创建一个单独的方法。问题是,你错过了一个根据它的函数命名的机会。这种方法违反了SRP。带有lambda的select是另一回事,因为它是一个简单的模式。如果您可以将内部简化为lambdas,那么情况可能会有所不同。但是一般来说,对于使用select的类来说,选择方法比模式的实现更重要。