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

如何使用LINQ对连接后的表中PiValue列求和?

在ASP.NET Core Web API的GetReport接口中计算LINQ连接结果的Value总和

完整实现示例

假设你的DbContext中包含BTBPending和ProformaInvoice两个DbSet,以下是在GetReport接口中完成连接、筛选并计算总和的代码:

方法语法实现

[HttpGet("GetReport")]
public IActionResult GetReport(int year, int month)
{
    var totalValue = _context.BTBPending
        .Join(
            _context.ProformaInvoice,
            btb => btb.ContractListId,
            pi => pi.ContractListId,
            (btb, pi) => new { btb.PiValue, btb.CountryListId, btb.StatusListId, btb.CreationDate }
        )
        .Where(result => 
            result.CreationDate.Year == year && 
            result.CreationDate.Month == month &&
            result.CountryListId == 26 &&
            new[] {12, 13, 14}.Contains(result.StatusListId)
        )
        .Sum(result => result.PiValue ?? 0); // 处理PiValue可能为null的情况

    return Ok(new { TotalValue = totalValue });
}

查询语法实现

如果你更习惯LINQ查询语法,也可以这样写:

[HttpGet("GetReport")]
public IActionResult GetReport(int year, int month)
{
    var query = from btb in _context.BTBPending
                join pi in _context.ProformaInvoice on btb.ContractListId equals pi.ContractListId
                where btb.CreationDate.Year == year && 
                      btb.CreationDate.Month == month &&
                      btb.CountryListId == 26 &&
                      (btb.StatusListId == 12 || btb.StatusListId == 13 || btb.StatusListId == 14)
                select btb.PiValue;

    var totalValue = query.Sum(v => v ?? 0);

    return Ok(new { TotalValue = totalValue });
}

关键说明

  • 内连接逻辑:通过ContractListId将两个表关联,确保只返回同时存在于两个表中的记录
  • 筛选条件:
    • 匹配指定的年份和月份(假设你用CreationDate字段判断时间,可根据实际字段调整)
    • 限定CountryListId为26
    • 筛选StatusListId为12、13或14的记录
  • 总和计算:使用Sum方法对PiValue求和,通过?? 0处理字段可能为null的情况,避免出现NullReferenceException
  • 返回结果:将计算得到的总和包装成匿名对象,以JSON格式返回

内容的提问来源于stack exchange,提问作者Masum Rayhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:20:39