【发布时间】:2013-01-26 06:05:33
【问题描述】:
这是我在现实世界中的例子。 我有 4 张桌子:
- 人
- 计划
- 覆盖范围
- CoveredMembers
每个人可以有多个计划,每个计划都可以有多个承保范围。这些覆盖范围中的每一个都可以有许多 CoveredMember。
我需要一个对Plan.PlanType == 1 和CoveredMembers.TermDate == null 应用过滤器的查询。
此查询应带回任何拥有未终止医疗类型计划的人。
这条 SQL 语句可以做到这一点:
SELECT Person.*, Plans.*, Coverages.*, CoveredMembers.*
FROM Person P
INNER JOIN Plan PL ON P.PersonID = PL.PersonID
INNER JOIN Coverage C on PL.PlanID = C.PlanID
INNER JOIN CoveredMember CM on C.CoverageID = CM.CoverageID
WHERE CM.TermDate = NULL AND PL.PlanType = 1
我已经知道如何使用匿名类型来做到这一点,但有时我需要更新数据并保存回数据库 - 并且匿名类型是只读的。
我得到了一个使用 JOIN 确实有效的解决方案,但它只带回了人员(尽管过滤了我需要的方式)。然后我可以遍历每个人:
foreach (var person in persons) {
foreach (var plan in person.Plans{
//do stuff
}
}
但这不会为循环的每次迭代都进行一次数据库调用吗?我有 500 人,每人有 3 个未终止的医疗计划,所以它会调用 db 1500 次?
这就是为什么我想一次性将整个数据树从 Persons 带回 CoveredMembers。这不可能吗?
【问题讨论】:
标签: entity-framework entity-framework-4