繁体   English   中英

LINQ更新表用EmptyString 100万条记录替换NULL

[英]LINQ update table replacing NULL with EmptyString 1 million records

我一直在尝试更新一个包含100万条记录的表,并将其4个字段的NULL值替换为空字符串(“”)。 Foreach和似乎需要很长时间。 我花了1分钟更新了3 000条记录。 有没有更简单的方法来使用linq或可能的过程更新表?

这是我目前使用的,但它需要永远,我可能需要经常这样做:

foreach (MG_Backup item in mg)
{
    lblAllNulls.Text +="<br />ID:"+item.ID+" ";
    if (item.Name == null )
    {
        item.Name = "";
        lblAllNulls.Text += "Name ";
    }
    if (item.Company == null)
    {
        item.Company = "";
        lblAllNulls.Text += "Company ";
    }
    if (item.Addr1 == null)
    {
        item.Addr1 = "";
        lblAllNulls.Text += "Addr1 ";
    }
    if (item.Addr2 == null)
    {
        item.Addr2 = "";
        lblAllNulls.Text += "Addr2 ";
    }
    if (item.FullAddress == null)
    {
        item.FullAddress = "";
        lblAllNulls.Text += "FullAddress ";
    }
    if (item.City == null)
    {
        item.City = "";
        lblAllNulls.Text += "City ";
    }
    //saves the changes
    db.SaveChanges();
}

至于db代码,您将分别更新每条记录。 尝试将SaveChanges()移出循环。 或者使用计数器保护它,并且只保存每N个记录。

您的lblAllNulls代码显示了需要StringBuilder的经典模式:

foreach (MG_Backup item in mg)
{
   lblAllNulls.Text +="<br />ID:"+item.ID+" ";
   ...
}

字符串在foreach循环中连接。 lblAllNulls.Text必须不断重新分配复制。 几千回合后,这变得非常缓慢。

你没有显示你的LINQ语句,但是从你的代码中我假设你做了类似这样的事情:

var mg = from mgs in <Table>
         select mgs;
//loop you showed

这会导致LINQ获取所有项目,无论它们是否必须更新。


根据您实际需要更新的记录数量,您可以通过以下方式更快地完成更新:

var mg = from mgs in <Table>
         where mgs.Name == null || mgs.Company == null // || and so on and so forth
         select mgs;
//loop you showed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM