0

私は3つのクラスを持っています。WorkoutSession、WorkoutSessionExerciseおよびExercise。

エクササイズに関連するWorkoutSessionのリストを含むWorkoutSession返したいと思います。WorkoutSessionには多くのWorkoutSessionExerciseがあり、これらには、Exerciseとの1対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にエラーがあります:type引数をクエリから推測できません。

この3レベルの深いオブジェクトをLinqToEntityでロードするにはどうすればよいですか?

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を使用してネストされたエンティティをインクルードすることからのインスピレーション)を回避するには、これを試してください。

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 に答える