从LINQ查询批量更新?

时间:2014-03-05 22:08:08

标签: c# sql linq

现在我有一个应用程序一次处理一条记录在DB中的记录。

var records = from q in db.table 
              join j in db.OtherTable 
              where q.processed == 0 //Sample 
foreach(var record in records)
{
    //Do some stuff....

    db.ExecuteCommand("Update table set record.processed = 1 where id = record.ID");
}

在foreach结束时,它会将记录更新为已处理。显然,因为LINQ在更新方面做得不好,所以我只执行executeCommand。现在要求此应用程序快速运行。现在,“做一些东西”花了不到一秒的时间来运行数千行,它甚至使用SqlBulkCopy将记录插入到表中。

问题在于,当我输入代码来更新记录的处理时,它会显着减慢记录速度。它必须数千次更新数据库。什么是更快地更新我选择的所有记录(以及我选择的记录)而没有太多的速度损失。 (注意:如果完成整个过程(在foreach之后),如果它需要一点时间,那就没关系。)

1 个答案:

答案 0 :(得分:4)

您可以根据列表中的ID生成IN语句:

string ids = string.Join(", ", records.Select(r => r.RecordID));
string sql = string.Format("Update table set record.processed = 1 WHERE RecordID IN ({0}) ", ids)
db.ExecuteCommand(sql);