Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找丢失的外键_C#_Linq_Linq To Sql - Fatal编程技术网

C# 查找丢失的外键

C# 查找丢失的外键,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,好的,我想这是一个简单的。我在TblWorkout和tblPersonalRecords之间有一对多的关系。我现在已经从TblWorkout中删除了一些行,而没有从tblPersonalRecords中删除它们。我应该设置一个外键和一个级联删除 我正试图找出一个查询来查找tblPersonalRecords中的孤立行。以下是我尝试过的: from s in db.tblPersonalRecords where s.tblWorkoutRecord.WorkoutSummaryID == nul

好的,我想这是一个简单的。我在TblWorkout和tblPersonalRecords之间有一对多的关系。我现在已经从TblWorkout中删除了一些行,而没有从tblPersonalRecords中删除它们。我应该设置一个外键和一个级联删除

我正试图找出一个查询来查找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

阅读您对您可能想要的问题的评论:

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

也许我误解了这个问题,但是在从TBLWorkout中删除行之后,如果根本没有更新行,为什么还要检查tblPersonalRecords中的值是否为null

我希望将来的外键值现在指向TBLWorkout中不再存在的行,而不是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;

对于您的原始语句,编译器抱怨的是什么?您遇到了什么类型的错误?

也许我误解了这个问题,但是当您从TBLWorkout中删除行之后根本没有更新行时,为什么要检查tblPersonalRecords中的值是否为空

我希望将来的外键值现在指向TBLWorkout中不再存在的行,而不是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;
对于您的原始语句,编译器抱怨的是什么?您遇到了什么类型的错误?

这是有效的:

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
                         };
这就是成功的原因:

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

我假设您已经检查了数据库,并且这些列为null?不是列为null,而是tblworkoutRecord数据库中没有相应的行。我试着做s.tblworkoutrecord==null,但它不喜欢这种语法。我假设您已经检查了数据库,并且这些列为null?这不是因为列为null,而是因为tblworkoutrecord数据库中没有相应的行。我试着做s.tblworkoutrecord==null,但它不喜欢这种语法。@Nate!db.PersonalWorkout.Any应该是!s、 个人锻炼。只要你有良好的人际关系created@Nate !db.PersonalWorkout.Any应该是!s、 个人训练。只要你建立了良好的关系,任何训练都可以