2013-07-18 4 views
2
에 참여

I가 예상대로 작동 다음 SQL : 내가 Linq에 위를 변환하기 위해 노력하고있어LINQ - 그룹 및 합계

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; 

다음과 같이 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 열을 반환하도록 내 쿼리를 어떻게 얻을 수 있습니까?

+1

이미 그 일이 arent? – Thousand

+0

불행히도 없습니다. 쿼리에 바인딩 할 때 accountName 열이 gridview에 나타나지 않습니다. – Mark

+0

하지만 귀하의 검색어에서 그것을 선택하고 계시다면, 귀하의 gridview 코드를 보여 주시는 것이 더 좋을지 모르십니까? – Thousand

답변

5

이 그렇지 않으면 당신은 당신이에 의해 그룹을 수행 할 때처럼 여러 레코드를 얻을 수 있습니다, 주어진 Acct_Id 당 하나의 Acct_Name이 가정

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

뛰어난 아론! 두 번째 옵션이 그랬다. 정말 고맙습니다. – Mark

+0

위대한, 귀하의 테스트 당 편집했습니다. – AaronLS