linq到sql更新多个记录
本文关键字:记录 更新 sql linq | 更新日期: 2023-09-27 18:13:32
这是一个简单的问题,但我完全不知道如何解决这个问题。
CREATE TABLE Contract (
id int PRIMARY KEY,
batchId int NOT NULL REFERENCES ContractBatch (id)
campaignId int NULL REFERENCES Campaign (id)
)
这是我的商业模型中的简化表,制作成了Linq2Sql模型。现在我需要这样做更新查询:
UPDATE Contract SET campaignId = 1 WHERE batchId = 5
这意味着,对于相同的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()
}
我已经在考虑用旧的方式来执行它,并手动执行该查询。我不喜欢它,但它可能比运行数百个更新查询要好。
你说得对,这种方法有两个问题——你将执行数百个单独的更新语句,你必须首先阅读它们才能进行更改。
这是ORM中常见的弱点。
在几个谷歌链接之后,我发现了以下博客文章,其中确实有一些有趣的事情要说:http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx
您可以使用存储过程并在DataContext中执行它。有关更多详细信息,请参阅此帖子。