2012-05-07 64 views
1

好的,這個是我認爲的一個簡單的。我有tblWorkoutstblPersonalRecords之間的一對多關係。我現在從tblWorkouts刪除了一些行而不從tblPersonalRecords中刪除它們(我應該設置一個外鍵和級聯刪除...)。查找丟失的外鍵

我試圖找出一個查詢來查找tblPersonalRecords中的孤行。以下是我的嘗試:

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

這不起作用。如何編寫LINQ查詢來查找孤行?如果這有所作爲,我使用Linq2Sql。

+0

我假設你已經檢查了數據庫,這些字段爲空? – 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

閱讀您的評論的問題,你可能想:

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

它不喜歡.Any();語法錯誤。 – Nate

+0

@Nate!db.PersonalWorkout.Any(應該是!s.PersonalWorkouts.Any(只要你有正確的關係創建 – Tassadaque

3

也許我誤解了問題,但爲什麼你會檢查是否在tblPersonalRecords值爲null時,你有沒有更新的行都刪除行後來自tblWorkouts?

我期望現在的外鍵值現在指向tblWorkouts中不再存在的行,而不是null。

如果是這樣的話,那麼也許會有這樣的幫助:

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; 

它是什麼,編譯器在你原來的語句的情況下,無論如何抱怨?你得到什麼類型的錯誤?