8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

LINQ:使用 INNER JOIN、Group 和 SUM

Null_Space 1月前

28 0

我正在尝试使用 LINQ 执行以下 SQL,而我最接近的结果是执行交叉连接和求和计算。我知道一定有更好的方法来编写它,所以我转向堆栈技术...

我正在尝试使用 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)};

我知道一定有更好的方法来写它,我只是不知道如何,任何帮助都将非常有用!

帖子版权声明 1、本帖标题:LINQ:使用 INNER JOIN、Group 和 SUM
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Null_Space在本站《linq》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 尝试一下:

    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) 
                };
    
  • 谢谢你,尼克,我最初以为答案是错误的,但在重新阅读并再次执行后,我意识到我在最初的尝试中犯了一个错误,而你的答案是正确的。谢谢!

  • 对于较新的.NET 版本(4.0 及更高版本?),请查看下面 twnaing 的回答。

  • 对于我(使用 4.0)来说,以下方法有效。

    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 = g.Key.Column1, 
                    Column2 = g.Key.Column2, 
                    Amount = g.Sum(t3 => t3.Column1) 
                };
    
  • 下面的代码对我有用:

                              var credit = (from bm in BulkMessage
                              join sms in SMS on bm.BulkMessageId equals sms.BulkMessageId
                              where bm.ProfileId == pid && bm.IsActive == true
                               group sms by sms.SMSCredit into g
    
                              select new { SMSCredits = g.Sum(s => s.SMSCredit) }).FirstOrDefault();
    
返回
作者最近主题: