Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq到实体-相关子查询_Linq_Entity Framework 6_Linq To Entities - Fatal编程技术网

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中公开