2012-05-07 34 views
1

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

私は、孤立した行を検索するために、tblPersonalRecordsで検索しようとしています。ここで私が試したことがあります:

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

これは動作しません。孤立した行を見つけるためのLINQクエリを作成するにはどうすればよいですか?私はそれが違いをもたらす場合Linq2Sqlを使用しています。

from s in db.tblPersonalRecords 
where !db.PersonalWorkout.Any(x => s.WorkoutRecordID == x.WorkoutRecordID) 
select s 
+0

私はあなたがデータベースをチェックしました、そしてそれらの列がNULLであると仮定? – Robaticus

+0

列がヌルではないことは、tblworkoutRecordデータベースに対応する行がないことです。私はs.tblworkoutrecord == nullを実行しようとしましたが、その構文が気に入らなかった。 – Nate

答えて

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 
         }; 
3

tblWorkoutsから?

私は、外部キーの値が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; 

それはコンパイラが、とにかくあなたの元の文の場合に文句を言っていることは何ですか?どのようなエラーが表示されますか?

+0

.Any();が好きではありません。構文エラー。 – Nate

+0

@Nate!db.PersonalWorkout.Any(!s.PersonalWorkouts.Anyである必要があります) – Tassadaque

3

は、たぶん私は質問を誤解していますが、行を削除した後で、すべての行を更新していないときtblPersonalRecordsの値がnullの場合、なぜあなたがチェックします:あなたはおそらくする質問にあなたのコメントを読む

関連する問題