C# 查找丢失的外键
好的,我想这是一个简单的。我在TblWorkout和tblPersonalRecords之间有一对多的关系。我现在已经从TblWorkout中删除了一些行,而没有从tblPersonalRecords中删除它们。我应该设置一个外键和一个级联删除 我正试图找出一个查询来查找tblPersonalRecords中的孤立行。以下是我尝试过的: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
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、 个人训练。只要你建立了良好的关系,任何训练都可以