2014-09-29 39 views
0

假設我有一個類似於下面的模型(和表):使用LINQ使用匹配的密鑰關聯表中刪除表多行

Program: ProgramId (PKey) 
ProgramRegistration: ProgramRegistrationId (PKey), ProgramId (FKey) 
CourseEnrollments: CourseEnrollmentId (PKey), ProgramRegistrationId (FKey) 

我需要做的是,在控制器我傳遞恰好是ProgramId的id。我想批量刪除ProgramEntries中具有ProgramRegistration中匹配記錄的所有行(或項目),並使用傳遞的參數id = ProgramId。

所以我想我會做:

db.CourseEnrollments.Where(e => e.ProgramRegistration.ProgramId == id).ToList().Remove(); 

問題:那就是上面使用導航屬性正確的方法呢?

回答

1

我通過以下方式解決它,而不是:

var results = from c in vm.CourseEnrollments 
       where c.ProgramRegistration.ProgramId == id 
       select c; 

foreach (var courseenrollment in results) 
{ 
    db.CourseEnrollments.Remove(courseenrollment); 
} 
db.SaveChanges(); 
+0

是的,這是正確的。幾乎是唯一的方法。在擴展方法風格中,它將是'foreach(var c in db.CourseEnrollments.Where(e => e.ProgramRegistration.ProgramId == id)'。它們是相等的。 – abatishchev 2014-10-01 06:14:33

相關問題