sql - 在 Linq 中加入子查询结果

标签 sql linq join

我再发表一个我的疑问:
有没有一种方法可以使用一个查询的结果,然后像我们在 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 };

关于sql - 在 Linq 中加入子查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166151/

相关文章:

SQL自连接查询?如何获取类别子类别?

php - mysql select/delete using join over 四个表

mysql - 找到多列索引的最佳顺序

mysql - 在 SELECT 期间确定另一个表中相关行的数量 (0 - n)

.net - 如何使用 LINQ to XML 读取/写入加密的 XML 文件?

c# - 如何从分组元素创建字典?

mysql - 查询多张表,但只得到一张表的结果,不重复

sql - 创建所有可能组合的列表

Mysql错误: 1215 Cannot add foreign key constraint

c# - 声明空字节 - 可空对象必须有一个值?