c# - 从 LINQ 查询批量更新?

标签 c# sql linq

现在我有一个应用程序,它一次处理一个数据库中的记录。

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。现在要求此应用程序快速运行。现在,“Do some stuff”只需不到一秒钟的时间就可以遍历数千行,它甚至可以使用 SqlBulkCopy 将一条记录插入到表中。

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

最佳答案

您可以根据列表中的 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);

关于c# - 从 LINQ 查询批量更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210427/

相关文章:

c# - 使用 stardog : "cannot execute update query on read endpoint" 从 C# 发送 SPARQL 查询

sql - 如何用 "like"查询MongoDB

php - Mysql搜索字符串

c# - 我可以使用 datasource=.\\SQLEXPRESS 还是我现在需要使用 : machinename\\SQLEXPRESS

c# - Wpf Prism MVVM 模块之间的变化

SQL Server : subscription : how to know if a table is under replication/subscription

c# - IEnumerable<> 到 IList<>

c# - 在 xdocument 中移动节点

c# - Entity Framework Linq何时查询Hints Sql数据库?

c# - 如何在 Visual Studio 2012 中制作 xml 文档