【问题标题】:Compare two datatable and set its value比较两个数据表并设置其值
【发布时间】:2018-03-14 08:52:59
【问题描述】:

我有 2 个数据表,我只需要比较一列单元格的值。检查它是否等于然后获取 dt2 的单元格值并将其设置在 dt 上。到目前为止我得到了什么。它按预期工作,但由于两个数据表中的条目很大,所以花了很长时间。

foreach (DataRow row in dt.Rows)
{
    foreach (DataRow row2 in dt2.Rows)
    {
        if (row[0].ToString().Equals(row2[0].ToString()))
        {
            row[1] = row2[1];
            row[68] = row2[59];
        }
    }
}

如何提高性能?我没有足够的经验来使用和了解 linq 或其他人..任何以与此相同的方式工作的示例将不胜感激。谢谢

【问题讨论】:

    标签: c# performance datatable compare


    【解决方案1】:

    也许这种 LINQ 方法更快一些,因为它是基于集合的方法:

    var updateRows = from r1 in dt.AsEnumerable()
                     join r2 in dt2.AsEnumerable()
                     on r1.Field<string>(0) equals r2.Field<string>(0)
                     select new { r1, r2 };
    
    foreach(var x in updateRows)
    {
        x.r1.SetField(1, x.r2[1]);
        x.r1.SetField(68, x.r2[59]);
    }
    

    【讨论】:

    • 嗨,感谢您的回答..我的问题是..这也会更新 dt 吗?
    • @ZulfakarZukri:你见过foreach-loop,它将枚举LINQ查询updateRows吗? SetField 将更新值,但您也可以使用您的方式 row[1] = row2[1]
    • 是的,我只是对 LINQ 的工作原理感到困惑..但是您的代码工作得非常快,哈哈..谢谢..我需要了解更多
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2017-07-04
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多