现在我有一个应用程序一次处理一条记录在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之后),如果它需要一点时间,那就没关系。)
答案 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);