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

如何用LINQ合并3个表并添加另外两表的求和列?

解决方法

首先纠正你现有代码里的错误:on c.Cod equals b.Cod 中的 c 应该改为 a,因为这里是关联Tab1的a和Tab2的b。

要同时加入Tab3的Qty求和,最稳妥且高效的方式是先分别对Tab2和Tab3按Cod分组计算求和值,再与Tab1做左连接,避免直接关联多个表导致的笛卡尔积重复计算问题。具体实现如下:

// 预先计算Tab2中每个Cod对应的Qty2总和
var tab2Sum = Tab2
    .GroupBy(b => b.Cod)
    .Select(g => new { Cod = g.Key, Qty2Total = g.Sum(x => x.Qty2) });

// 预先计算Tab3中每个Cod对应的Qty3总和
var tab3Sum = Tab3
    .GroupBy(c => c.Cod)
    .Select(g => new { Cod = g.Key, Qty3Total = g.Sum(y => y.Qty3) });

// 将Tab1与两个求和结果左连接,确保Tab1的所有记录都保留
var query = from a in Tab1
            // 左连接Tab2的求和结果
            join t2 in tab2Sum on a.Cod equals t2.Cod into t2Group
            from t2 in t2Group.DefaultIfEmpty()
            // 左连接Tab3的求和结果
            join t3 in tab3Sum on a.Cod equals t3.Cod into t3Group
            from t3 in t3Group.DefaultIfEmpty()
            select new
            {
                a.Cod,
                a.Qty1,
                Orders = t2?.Qty2Total ?? 0, // 若没有匹配记录,默认求和为0
                Orders2 = t3?.Qty3Total ?? 0
            };

为什么不直接在原查询中加入Tab3连接?

如果直接在原查询里关联Tab3,会导致Tab2和Tab3的记录形成笛卡尔积(比如同一Cod下Tab2有2条、Tab3有3条记录,关联后会生成6条组合记录),最终求和结果会被重复计算,无法得到正确的单表求和值。预先分组求和再连接的方式可以避免这个问题,同时提升查询性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:17:16