Linq到实体-相关子查询
我有以下疑问:Linq到实体-相关子查询,linq,entity-framework-6,linq-to-entities,Linq,Entity Framework 6,Linq To Entities,我有以下疑问: var query = db.DepoAccounts .Join(db.DepoAccountDetails, t1 => new { t1.INTEG_REF_NO, t1.BASE_DATE }, t2 => new { t2.INTEG_REF_NO, t2.BASE_DATE }, (t1, t2) => new DataCustomerAccountGDWHModel {
var query = db.DepoAccounts
.Join(db.DepoAccountDetails,
t1 => new { t1.INTEG_REF_NO, t1.BASE_DATE },
t2 => new { t2.INTEG_REF_NO, t2.BASE_DATE },
(t1, t2) => new DataCustomerAccountGDWHModel
{
BranchNumber = t1.BR_NO,
BookedBalance = t2.DP_FACE_BAL_VAL_ADJ,
}
)).Where(ac => ac.BranchNumber == "500" &&
(ac.AccountNumber.Substring(0, 1) == "H" ||
ac.AccountNumber.Substring(0, 1) == "F"));
如何添加到上述内容中以执行相关子查询
AND DEP2.EFECT_DT = (SELECT MAX(DEP3.EFECT_DT) FROM
R_DBLNK_US.DW_TRN_DEPO_ACC_DTL_D DEP3
WHERE DEP.INTEG_REF_NO = DEP3.INTEG_REF_NO
AND DEP.BASE_DATE = DEP3.BASE_DATE)
EF不是SQL的替代品,它是一种ORM。它并不意味着生成相关的子查询。甚至连连接都是一种强烈的气味——它们应该由EF本身根据实体关系生成。
DepoAccount
实体(非表)应具有AccountDetails
属性,并在DbContext本身中配置1对多关系。不需要这样的联合感谢,我很感激你的评论。但我在这里时间有限。有可能做到我所说的吗?这就是为什么你不应该尝试在EF中做到这一点。ORM一般不用于报告查询,而不仅仅是EF或LINQ到EF。您可以做的是将实体映射到视图-创建与预期结果匹配的实体,并将其映射到生成该结果的视图。您还可以使用来调用函数而不是视图。如果出于性能原因,您的查询需要将参数直接传递给子查询,则必须这样做。您还可以使用Dapper而不是完整的ORM来执行查询并映射结果。对于报告查询,您将不使用跟踪,因此您不需要一个功能齐全的ORM。最后,您可以使用窗口和分析查询来加速SELECT MAX()
子查询,例如使用FIRST\u VALUE
,LAST\u VALUE
甚至MAX(DEP3.EFFECT\u DT)(按DEP.3.INTEG\u REF\u NO分区,DEP3.BASE\u日期分区)
。像这样的相关子查询必须为每个外部行运行一次。如果ORDER BY
子句匹配,则可以在生成外部结果的同一扫描中计算超过
的排序或分析函数。这些函数都没有在LINQ to EF中公开