Вроде бы простая проблема, но я совершенно заблудился, как к этому подойти.
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()
}
Я уже думаю о том, чтобы сделать это по-старому 1014 * и выполнить этот запрос вручную. Мне это не нравится, но это, вероятно, лучше, чем запускать сотни запросов на обновление.