2013-04-23 107 views
21

我張貼我的一個更加懷疑: 是否有通過它我們可以使用一個查詢的結果,然後加入相同進一步就像我們在SQL做的方式:加入子查詢結果中的LINQ

SELECT Applications.* , ApplicationFees.ApplicationNo, ApplicationFees.AccountFundDate1,ApplicationFees.AccountFundDate2 ,ApplicationFees.AccountFundDate3 , ApplicationFees.AccountCloseDate1, ApplicationFees.AccountCloseDate2,ApplicationFees.AccountCloseDate3, 
isnull(SUBQRY11.AMNT ,0) as SCMSFEE1R, 
isnull(SUBQRY12.AMNT,0) as SCMSFEE2R, 
Left Join 
(
SELECT ApplicationNo,COUNT(ApplicationNo) AS CNT, SUM(Amount) as AMNT 
FROM Payments where (FEETYPE=1 AND FeePosition=1) and (FeeDate>='2011-01-01') 
and (FeeDate<='2012-01-01') 
GROUP BY ApplicationNo 
)SUBQRY11 
ON ApplicationFees.ApplicationNo= SUBQRY11.ApplicationNo 
Left Join 
(
SELECT ApplicationNo,COUNT(ApplicationNo) AS CNT2, SUM(Amount) as AMNT 

FROM Payments where (FEETYPE=1 AND FeePosition=2) and (FeeDate>='2011-01-01') 
and (FeeDate<='2012-01-01') 
GROUP BY ApplicationNo)SUBQRY12 ON ApplicationFees.ApplicationNo=SUBQRY12.ApplicationNo 

我想避免在查詢的foreach相同,這將是相當耗時。

回答

37

是的,你可以加入子查詢。就像這樣:

var query = from f in db.ApplicationFees 
      join sub in (from p in db.Payments 
         where p.Type == 1 && p.Position == 1 && 
           p.Date >= fromDate && p.Date <= toDate 
         group p by p.ApplicationNo into g 
         select new { 
           ApplicationNo = g.Key, 
           CNT = g.Count(), 
           AMNT = g.Sum(x => x.Amount) 
         }) 
      on f.ApplicationNo equals sub.ApplicationNo into feePayments 
      select new { Fee = f, Payments = feePayments }; 

但在單個查詢寫不是很維護。考慮到從子查詢撰寫查詢定義分開:

var payments = from p in db.Payments 
       where p.Type == 1 && p.Position == 1 && 
       p.Date >= fromDate && p.Date <= toDate 
       group p by p.ApplicationNo into g 
       select new { 
        ApplicationNo = g.Key, 
        CNT = g.Count(), 
        AMNT = g.Sum(x => x.Amount) 
       }; 

var query = from f in db.ApplicationFees 
      join p in payments 
       on f.ApplicationNo equals p.ApplicationNo into feePayments 
      select new { Fee = f, Payments = feePayments }; 
+1

好讓我嘗試同樣的,我會恢復,也感謝您對快速支持 – 2013-04-23 11:09:56

+1

嗯,這是非常有用的,我還差點加盟9情況相同。 :) – 2013-04-24 10:35:50

+0

但可能一個查詢是更好的情況下的性能(比單獨的兩個查詢)? – psur 2014-01-24 19:20:42