C# LINQ到SQL-连接、组和求和

C# LINQ到SQL-连接、组和求和,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,我有以下SQL,可以按预期工作: 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

我有以下SQL,可以按预期工作:

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:

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

这假设每个给定的帐户Id只有一个帐户名,否则您将获得多个记录,就像按以下方式分组一样:

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))
           };

您是否已经这样做了?很遗憾,没有。当绑定到查询时,列AccountName不会显示在gridview上。但是您在查询中选择了它,最好向我们显示您的gridview代码。我认为,问题在于这里的查询,因为AccountName被分配了一个列表而不是单个项。您需要使用s.Key(Acct_id),仅为AccountName选择所需的单个名称。可能需要一个.single(),但我不记得如何使用linq语法,因为我通常使用扩展方法。希望有人能够演示这一点。杰出的Aaron!第二个选项做到了。非常感谢。