You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 23:03:02