1

さて、これは簡単なものだと思います。との間には1対多の関係がtblWorkoutsありtblPersonalRecordsます。tblWorkoutsから削除せずにいくつかの行を削除しましたtblPersonalRecords(外部キーとカスケード削除を設定する必要があります...)。

で孤立した行を見つけるためのクエリを見つけようとしていますtblPersonalRecords。これが私が試したことです:

from s in db.tblPersonalRecords
where s.tblWorkoutRecord.WorkoutSummaryID == null
select s

それはうまくいきません。孤立した行を見つけるためにLINQクエリを作成するにはどうすればよいですか?それが違いを生むなら、私はLinq2Sqlを使用しています。

4

3 に答える 3

3

質問を誤解しているかもしれませんが、tblWorkoutsから行を削除した後、行をまったく更新していないのに、なぜtblPersonalRecordsの値がnullかどうかを確認するのでしょうか。

外部キーの値は、nullではなくtblWorkoutsに存在しなくなった行を指すようになると思います。

その場合は、おそらく次のようなものが役立ちます。

var ids = from w in db.tblWorkouts
          select w.id;

var rows = from s in db.tblPersonalRecords
           where !ids.Contains(s.tblWorkoutRecord.WorkoutSummaryID)
           select s;

とにかく元のステートメントの場合、コンパイラが不平を言っているのは何ですか?どのような種類のエラーが発生していますか?

于 2012-05-07T20:37:05.110 に答える
3

あなたがおそらく望む質問についてのあなたのコメントを読んでください:

from s in db.tblPersonalRecords
where !db.PersonalWorkout.Any(x => s.WorkoutRecordID == x.WorkoutRecordID)
select s
于 2012-05-07T20:06:51.027 に答える
0

これがうまくいったことです:

var result = from s in db.tblPersonalRecords
                         join j in db.tblWorkoutRecords on s.WorkoutRecordID equals j.WorkoutRecordID into PersonalWorkout
                         from j in PersonalWorkout.DefaultIfEmpty()
                         where j == null
                         select new
                         {
                             PersonalRecordID = s.PersonalRecordID,
                             WorkoutRecordIDPR = s.WorkoutRecordID,
                             WorkoutRecordID = j == null ? 0 : 1
                         };
于 2012-05-07T21:06:19.617 に答える