linq to sql更新多条记录

Fre*_*dyC 1 c# linq-to-sql c#-4.0

这是一个简单的问题,但我完全迷失了如何处理这个问题.

CREATE TABLE Contract (
  id int PRIMARY KEY,
  batchId int NOT NULL REFERENCES ContractBatch (id)
  campaignId int NULL REFERENCES Campaign (id)
)
Run Code Online (Sandbox Code Playgroud)

这是我的商业模型中的简化表,是针对Linq2Sql模型的.现在我需要像这样做更新查询:

UPDATE Contract SET campaignId = 1 WHERE batchId = 5
Run Code Online (Sandbox Code Playgroud)

这意味着,可以有更多的记录ContractBatch,我需要Campaign为所有记录设置.有可能以一种简单的方式将此查询转换为Linq表达式吗?我能找到的唯一方法是获取所有那些记录,ContractBatch然后逐个循环更新.那不是很有效率.

var campaignId = 1;
var batchId = 5;
using( var dataContext = new DataModel.ModelDataContext() ) {
    dataContext.Contracts
        .Where( c => c.BatchId == batchId )
        // this is obviously my "wish to have" method
        .ForEach( c => c.CampaignId = campaignId )
    dataContext.SubmitChanges()
}
Run Code Online (Sandbox Code Playgroud)

我已经在考虑以旧方式执行它并手动执行该查询.我不喜欢它,但它可能比运行数百个更新查询更好.

Jon*_*ton 5

你是对的,这种方法有两个问题 - 你将执行数百个单独的更新语句,你必须首先阅读它们才能进行更改.

这是ORM中的常见弱点.

在一些谷歌链接后,我发现了以下博客文章,在这方面确实有一些有趣的事情要说:http: //www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-与-LINQ到SQL.aspx