访问child的child,都是1:M
本文关键字:child 访问 都是 | 更新日期: 2023-09-27 18:03:53
试图得到孩子的孩子,两个都有很多关系。
一个CarePeriod有很多DailyExerciseSets,这些DailyExerciseSets有很多exercistrials。carePeriod有DailyExerciseSets的集合,DailyExerciseSets有ExerciseTrials的集合我要写的SQL是
SELECT <bla>
FROM careperiods
left outer JOIN DailyExerciseSets ON (...)
left outer JOIN exerciseTrials ON (...)
WHERE
careperiods.bla = bla
AND DailyExerciseSets.bla = bla
AND exerciseTrials.bla = bla
只需要在EF/LINQ中复制这个逻辑。我已经围绕这个问题工作了几次,但我真的想看看这是如何实现的。
直觉上我会选择
var x = (from cp in db.carePeriod
.include(cp => cp.DailyExerciseSets) //this bit is fine
.include(cp => cp.DailyExerciseSets.exerciseTrials) //fail...
where (conditions...)
select cp);
但是这个失败了…
如果方向正确就好了。
要包含集合,你需要使用"sub select"而不是点符号:
var x = (from cp in db.carePeriod
.Include(cp => cp.DailyExerciseSets)
.Include(cp => cp.DailyExerciseSets.Select(es => es.exerciseTrials))
where (conditions...)
select cp);
这里也不需要Include(cp => cp.DailyExerciseSets)
,因为它已经包含在"子include"中了:
var x = (from cp in db.carePeriod
.Include(cp => cp.DailyExerciseSets.Select(es => es.exerciseTrials))
where (conditions...)
select cp);