[英]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.