这是我在现实世界中的例子。我有 4 张桌子:
- 人
- 计划
- 覆盖范围
- 涵盖成员
每个人可以有很多计划,每个计划都可以有很多承保范围。这些coverage 中的每一个都可以有许多 CoveredMember。
我需要一个对Plan.PlanType == 1
and应用过滤器的查询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
}
}
但这不会为循环的每次迭代调用一个 db 吗?我有 500 人,每人有 3 个未终止的医疗计划,所以它会调用 db 1500 次?
这就是为什么我想一次性将整个数据树从 Persons 带回 CoveredMembers。这不可能吗?