LINQ to SQL-连接,分组和求和 [英] LINQ to SQL - Join, Group, and Sum

查看:425
本文介绍了LINQ to SQL-连接,分组和求和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下符合预期的SQL:

I have the following SQL that works as expected:

SELECT  p.ACCT_ID AS [Acct], 
    a.ACCT_NAME AS [AcctName], 
    p.PD_NO AS [Period], 
    p.FY_CD AS [FY], 
    SUM(CUR_AMT) AS [CActual], 
    SUM(CUR_BUD_AMT) AS [CBudget], 
    SUM(YTD_AMT) AS [YActual], 
    SUM(YTD_BUD_AMT) as [YBudget] 
FROM BudgetTotals p 
INNER JOIN BudgetAccounts a 
    ON p.ACCT_ID = a.ACCT_ID WHERE p.ACCT_ID IN ('610','620','630','634','641','642','643','644','646','665','620','DFC','DFR','DGN','DTX') 
    AND FY_CD == "2013" 
    AND PD_NO == 12 
    AND POOL_NO == 23 
GROUP BY p.ACCT_ID, a.ACCT_NAME, p.PD_NO, p.FY_CD;

我正在尝试使用以下内容将以上内容转换为Linq到Sql:

I'm trying to convert the above to Linq to Sql with the following:

var query = from p in db.POOL_SIE_SUPPORTs
            join c in db.ACCTs on p.ACCT_ID equals c.ACCT_ID
            where arr.Contains(p.ACCT_ID) && p.POOL_NO == 23 && p.FY_CD == "2013" && p.PD_NO == 12
            group p by p.ACCT_ID into s
            select new
            {
                Account = s.Key,
                AccountName = from acct in db.ACCTs select new { acct.ACCT_NAME },
                CTDActual = string.Format("{0:C}", s.Sum(y => y.CUR_AMT)),
                CTDBudget = string.Format("{0:C}", s.Sum(y => y.CUR_BUD_AMT)),
                YTDActual = string.Format("{0:C}", s.Sum(y => y.YTD_AMT)),
                YTDBudget = string.Format("{0:C}", s.Sum(y => y.YTD_BUD_AMT))
           };

如何获取查询以返回列AccountName?

How can I get my query to return the column AccountName?

推荐答案

这假设每个给定的Acct_Id只有一个Acct_Name,否则您将获得多条记录,就像您按以下方式进行分组一样:

This assumes there is only one Acct_Name per given Acct_Id, otherwise you'll get multiple records just like when you do a group by:

var query = from p in db.POOL_SIE_SUPPORTs
            join c in db.ACCTs on p.ACCT_ID equals c.ACCT_ID
            where arr.Contains(p.ACCT_ID) && p.POOL_NO == 23 && p.FY_CD == "2013" && p.PD_NO == 12
            group p by new { p.ACCT_ID, p.ACCT_NAME } into s
            select new
            {
                Account = s.Key.ACCT_ID,
                AccountName = s.Key.ACCT_NAME, 
                CTDActual = string.Format("{0:C}", s.Sum(y => y.CUR_AMT)),
                CTDBudget = string.Format("{0:C}", s.Sum(y => y.CUR_BUD_AMT)),
                YTDActual = string.Format("{0:C}", s.Sum(y => y.YTD_AMT)),
                YTDBudget = string.Format("{0:C}", s.Sum(y => y.YTD_BUD_AMT))
           };

这篇关于LINQ to SQL-连接,分组和求和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆