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()
}

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

linq到sql更新多个记录

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

这是ORM中常见的弱点。

在几个谷歌链接之后,我发现了以下博客文章,其中确实有一些有趣的事情要说:http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

您可以使用存储过程并在DataContext中执行它。有关更多详细信息,请参阅此帖子。