以1:M的方式访问孩子的孩子

时间:2014-05-19 06:35:16

标签: c# linq entity-framework entity-framework-4

试图让孩子成为孩子,两人都有很多关系。

所以CarePeriod有许多DailyExerciseSets,它有许多ExerciseTrials。 所以carePeriod有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);

但这失败了..

正确方向上的一点很棒。

1 个答案:

答案 0 :(得分:0)

要包含您需要使用&#34; sub select&#34;而不是点符号:

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),因为这已包含在&#34; child include&#34;中:

var x = (from cp in db.carePeriod
             .Include(cp => cp.DailyExerciseSets.Select(es => es.exerciseTrials))
         where (conditions...)
         select cp);