删除不再选择的主题

时间:2015-11-13 07:54:10

标签: c# entity-framework linq

我正在尝试编辑学生不再选择的科目。这就是我的db的样子: enter image description here

使用editStudent查询我正在选择已编辑的项目并使用studentSubject我正在从db中检索主题。

var editStudent = (from st in _db.Students
                                   where st.Id == student.Id
                                   select new Students
                                  {
                                      Id = student.Id,
                                      Name = student.Name,
                                      Surname = student.Surname,
                                      BirthDate = student.BirthDate,
                                      Gender = student.Gender,
                                      Subject = (from q in student.Subject
                                                 select q).ToList()
                                  }).FirstOrDefault();

var studentSubjects = (from q in _db.Subjects
                                       where q.StudentId == student.Id
                                       select q.Name).ToList();

如何删除未选择的主题? (他们将不会在第一次查询的主题列表中)

例如:

  db中的

是2个主题数学和英语,用户改变了这些,现在他   只有数学。第一个查询将仅返回列表中的数学和第二个   将返回数学和英语

1 个答案:

答案 0 :(得分:0)

您可以轻松选择未使用的主题

var subjectsNotUsed = _db.Subjects.Where(subject => subject.StudentId == null);

然后(如果您使用的是Entity Framework 6),您可以使用.RemoveRange(),所以:

_db.Subjects.RemoveRange(subjectsNotUsed);
_db.SaveChanges();

如果使用较低版本的EF,则需要逐个删除:

foreach (var subject in notUsedSubjects)
{
    _db.Subjects.DeleteObject(subject);
}
_db.SaveChanges();

但我认为您应该更改数据库架构。学生不应该与主题相关。您应该仅使用表格学生来获取有关学生的信息,并将表格主题仅用于主题。第三个表(基本M:N关系)你将代表学生有一些主题,如:

DB Diagram

这使您可以在数据库中存储每个科目和学生一次。