我对我的另一个疑问是:是否有一种方法可以使用一个查询的结果,然后像在SQL中一样进一步将其联接:
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中避免同样的事情,因为这将非常耗时。
是的,您可以加入子查询。像这样:
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 };