Sum Group By 的SQL语句改写为linq的示例

主表Equip_MaintenanceOrders的总成本金额等于成本明细子表的成本金额的总和, SQL语句如下:

;with costAmtTemp as
(
    select MaintenanceOrderId,Sum(ISNULL(TotalAmt,0)) as Amt from Equip_MaintenanceCollectMaterials with(nolock) 
    where MaintenanceOrderId='bfda03fc-c6b2-ce5c-d64e-3a153bd3473e'
    group by MaintenanceOrderId
)
update a set a.CostAmt=b.Amt
from  Equip_MaintenanceOrders a
left join costAmtTemp b on(a.Id=b.MaintenanceOrderId)
where a.Id='bfda03fc-c6b2-ce5c-d64e-3a153bd3473e'

改写为Linq如下:

var db = await GetDbContextAsync();

// 计算Equip_MaintenanceCollectMaterials中对应MaintenanceOrderId的TotalAmt总和
var costAmt = db.MaintenanceCollectMaterials
    .Where(m => m.MaintenanceOrderId == maintenanceOrderId)
    .GroupBy(m => m.MaintenanceOrderId)
    .Select(g => new { MaintenanceOrderId = g.Key, Amt = g.Sum(m => m.TotalAmt ?? 0) })
    .FirstOrDefault();

// 获取Equip_MaintenanceOrders中对应的记录
var maintenanceOrder = db.MaintenanceOrders
    .SingleOrDefault(a => a.Id == maintenanceOrderId);

// 如果找到了对应的记录,则更新CostAmt
if (maintenanceOrder != null && costAmt != null)
{
   maintenanceOrder.CostAmt = costAmt.Amt;
   db.SaveChanges(); // 保存更改
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NetX行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值