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 中的值是否为空?

我希望可能的外键值现在指向 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 回答