【问题标题】:Delete record using linQ with lambda Expression使用带有 lambda 表达式的 linQ 删除记录
【发布时间】:2015-05-21 08:29:57
【问题描述】:

我想使用 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;
}

【问题讨论】:

    标签: c# asp.net linq entity-framework lambda


    【解决方案1】:

    我从之前的建议中得到了参考。

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

    【讨论】:

    • 这正好移除了零个或一个个学生。你确定这就是你想要的吗?
    • 对,我正在使用while循环删除多条记录。
    • 这将生成两个查询和两个数据库往返每个学生。这是很多不必要的往返,但如果你对此感到满意并且它有效,那就把自己搞砸了。
    【解决方案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;
    }
    

    【讨论】:

    • 这里需要指出一件非常重要的事情,因为它只是代码 - 这将生成 两个 单独的数据库往返:一个用于查找要删除的实体,一个用于发出删除命令。删除实体的往返将发出每个实体一个删除语句,而不是单个删除语句。
    • 代码不是 EntityFramework(而是 Linq2SqlServer 或类似的东西(LinqPad))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多