Linq to SQL 在一次查询中更新多条记录

Linq to SQL update multiple records in one query

给定代码:

var q = db.TranslationProjectKeys.Where(c => c.ProjectID == forProject.ID);
foreach (var key in q)
{
    key.Live = false;
}
db.SubmitChanges();

如果我 运行 SQL 服务器分析器它会显示许多 UPDATE.... SQL 语句。我相信如果使用一个 UPDATE 语句执行此查询,这会快得多:

UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = x

有没有办法让查询以这种方式执行?

我对使用 db.ExecuteCommand("...") 持谨慎态度,因为我知道可以缓存上下文,这会导致一些错误。

linq to sql 没有内置的批量更新功能(除非发生了某些变化)。你可以像

一样手动执行命令
dataContext.ExecuteCommand("UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = {0}", x);

或者如果你想变得更有趣,你可以尝试实现自己的批量更新功能,如 this 文章所示,但它更加深入和复杂(尽管可以做到)

您可以使用 EntityFramework.Extended 。您可以执行多个更新。 例如

var q = db.TranslationProjectKeys.Where(c => c.ProjectID == forProject.ID).Update(c => new TranslationProjectKey{ Live  = false })