使用Lambda表达式和LinQ删除记录

3
我想使用linq lambda表达式删除sql数据库记录。我该怎么做?
这里的“student”是我的数据表,“db”是.edmx文件的对象。
public bool DeleteRecord(int caurseID)
{
    studentEntities db = new studentEntities();

    int count = db.student.Where(s => s.caurse_id == caurseID).Count();

    if (count != 0)
    {
        //string subQuery = "delete from student where caurse_id=" + caurseID;
        //SqlCommand subCmd = new SqlCommand(subQuery, conn);
        //subCmd.ExecuteNonQuery();
        db.student. : For Delete, what will be goes here???
    }

    return true;
}
2个回答

8
我参考了之前的建议。
studentEntities db_dlt = new studentEntities();
                var students = db_dlt.student.FirstOrDefault(s => s.caurse_id == caurseID);
                if (students != null)
                {
                    db_dlt.student.Remove(students);
                    db_dlt.SaveChanges();
                }

这将删除恰好零个或一个学生。你确定这就是你想要的吗? - J. Steen
没错,我正在使用 while 循环来删除多条记录。 - Trusha Savsani
这将为每个学生生成两个查询和两个往返于数据库的操作。这是很多不必要的往返操作,但如果您对此感到满意并且可以使用,就继续吧。 - J. Steen

2
public bool DeleteRecord(int caurseID)
{
   studentEntities db = new studentEntities();

   var students = db.student.Where(s => s.caurse_id == caurseID);


   if(students.Any()) 
   {
       db.DeleteAllOnSubmit(students);

       db.SubmitChanges();
   }

   return true;
}

1
这里需要指出一件非常重要的事情,因为这只是代码 - 这将生成两个单独的数据库往返:一个用于查找要删除的实体,另一个用于发出删除命令。删除实体的往返将针对每个实体发出一个删除语句,而不是一个单独的删除语句。 - J. Steen
代码不是EntityFramework(而是Linq2SqlServer或类似的东西(LinqPad)) - springy76
@J.Steen 如何在一次往返中删除它 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接