c# - LINQ:使用 INNER JOIN、Group 和 SUM

标签 c# linq .net-3.5

我正在尝试使用 LINQ 执行以下 SQL,我得到的最接近的结果是进行交叉连接和求和计算。我知道必须有更好的方法来编写它,所以我向堆栈团队寻求帮助。

SELECT T1.Column1, T1.Column2, SUM(T3.Column1) AS Amount
FROM T1
     INNER JOIN T2
        ON T1.T1ID = T2.T1ID
     INNER JOIN T3
        ON T2.T3ID = T3.T3ID
GROUP BY T1.Column1, T1.Column2

我一直在尝试的是以下 LINQ 代码

var qTotal = from T2 in context.T2
             from T3 in context.T3
             where T3.T3ID == T3.T3ID
             group T3 by T2.T1ID into gT2T3
                  from T1 in context.T1
                  where gT2T3.Key.Equals(T1.T1ID)
                  select new { T1.Column1,T1.Column2,Amount = gT2T3.Sum(t => t.Column1)};

我知道必须有更好的方法来编写它,我只是不知道如何,任何帮助都会很棒!

最佳答案

试试这个:

var total = from T1 in context.T1
            join T2 in context.T2 on T1.T2ID equals T2.T2ID
            join T3 in context.T3 on T2.T3ID equals T3.T3ID
            group T3 by new { T1.Column1, T1.Column2 } into g
            select new { 
                Column1 = T1.Column1, 
                Column2 = T2.Column2, 
                Amount = g.Sum(t3 => t3.Column1) 
            };

关于c# - LINQ:使用 INNER JOIN、Group 和 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/530925/

相关文章:

c# - 特定条目的 LINQ 索引

c# - 具有匿名类型的 linq 表达式中的 TryGetValue()

c# - 我如何预先设置流?

c# - 限制密码套件的编程方式

c# - 具有不同 ID 字段名称的 EF Fluent API 多对多

c# - 在 WPF 的代码隐藏中为 ListBox 创建 ItemTemplate - 第 II 部分

c# - 用自身抵消可枚举的最佳方法

c# - 'Linqed' IObservable 使用 Reactive Expressions 的生命周期

c# - 在 ASP.NET Core 中使用 DbContext 注入(inject)进行并行 EF Core 查询

datetime - 设置日期时间值的格式 日值