如何在单个lambda表达式中同时使用update与join实现SQL关联更新
SQL转Lambda表达式实现(关联更新场景)
原始SQL功能说明
你提供的是跨表关联更新语句,基于GroupID字段关联Sales表(别名SI)和SaleDesc表(别名SD),将匹配行的Sales.ACP字段更新为对应SaleDesc.ACP的值。
原始SQL代码如下:
UPDATE Sales SET SI.ACP= SD.ACP FROM Sales SI INNER JOIN SaleDesc SD ON SI.GroupID= SD.GroupID;
Lambda实现方案
方案1:EF原生逐行更新(兼容所有EF版本,适合小数据量)
先关联查询匹配数据,再逐行赋值提交:
// 关联查询出需要更新的匹配数据 var matchList = dbContext.Sales .Join( dbContext.SaleDesc, si => si.GroupID, // Sales表关联键 sd => sd.GroupID, // SaleDesc表关联键 (si, sd) => new { SaleItem = si, DescItem = sd } // 返回关联的两个实体 ) .ToList(); // 批量赋值 foreach (var item in matchList) { item.SaleItem.ACP = item.DescItem.ACP; } // 提交数据库更改 dbContext.SaveChanges();
方案2:批量更新(EF Core 7+ 原生支持,适合大数据量)
无需把数据加载到内存,直接在数据库层面执行批量更新,性能更高:
dbContext.Sales .Join( dbContext.SaleDesc, si => si.GroupID, sd => sd.GroupID, (si, sd) => new { SaleItem = si, DescItem = sd } ) .ExecuteUpdate(setter => setter.SetProperty(x => x.SaleItem.ACP, x => x.DescItem.ACP) );
内容的提问来源于stack exchange,提问作者VishalD
相关产品推荐
相关产品推荐

