0

我有3节课。WorkoutSession、WorkoutSessionExercise 和锻炼。

我想返回 WorkoutSession及其与运动相关的 WorkoutSession 列表。WorkoutSession 有很多 WorkoutSessionExercise,而这一个和Exercise 只有一个1 对1 的关系。

             var query = from workoutSession in DatabaseContext.SetOwnable<WorkoutSession>()
             from workoutSessionExercises in workoutSession.WorkoutSessionExercises
             from exerciseInfo in workoutSessionExercises.Exercise
             where workoutSession.Id == id
             select workoutSession;

最后一个 FROM 有错误:无法从查询中推断类型参数。

如何使用 Linq To Entity 加载这三层深的对象?

4

2 回答 2

1

像这样的东西会起作用吗?

DatabaseContext.SetOwnable<WorkoutSession>
    .Include("WorkoutSessionExercises.Exercise")
    .Where(w => w.Id == id);

替代语法:

from workoutSession in DatabaseContext.SetOwnable<WorkoutSession>
    .Include("WorkoutSessionExercises.Exercise")
    where workoutSession.Id == id
    select workoutSession;

这里的关键是该Include方法 - 这允许您指示哪些相关对象应该被水合。

编辑

试试这个来绕过基于字符串的包含(灵感来自使用 LINQ 的 Include 嵌套实体):

var query = from workoutSession in DatabaseContext.SetOwnable<WorkoutSession>
select new
{
     WorkoutSession,
     WorkoutSessionExercises = from workoutSessionExercise in
        DatabaseContext.SetOwnable<WorkoutSessionExercises>
        select new
        {
            WorkoutExercise = from workoutExercise in
                DatabaseContext.SetOwnable<WorkoutExercise>
                select workoutExercise
        }
};

var results = query.Select(r => r.WorkoutSession).Where(w => w.Id == id);
于 2012-10-14T21:51:02.193 回答
0
var query = DatabaseContext.SetOwnable<WorkoutSession>()
                           .Include(x => x.WorkoutSessionExercises
                                          .Select(e => e.Exercise))
                           .Where(x => x.Id == id);
于 2012-10-15T13:30:49.320 回答