删除 Linq 中的查询

问题描述 投票:0回答:9

我有这个简单的代码,但它显示错误。我不知道我哪里错了。 它显示最后一行有错误。

 linq_testDataContext db = new linq_testDataContext();
 var remove = from aremove in db.logins
         where aremove.username == userNameString && aremove.Password == pwdString
         select aremove;
 db.logins.DeleteOnSubmit(remove);
c# linq linq-to-sql
9个回答
5
投票

DeleteOnSubmit
接受单个对象。您正在向其传递一个
IEnumerable<login>
。请改用
DeleteAllOnSubmit
,或从结果集合中选择单个对象,如下所示:

var remove = (from aremove in db.logins 
             where aremove.username == userNameString 
                && aremove.Password == pwdString 
             select aremove).FirstOrDefault(); 

if(remove != null)
{
    db.logins.DeleteOnSubmit(remove);
}

5
投票

您缺少 foreach 循环来删除所有实体。

像下面这样使用

var remove = from aremove in db.logins
     where aremove.username == userNameString && aremove.Password == pwdString
     select aremove;

之后

foreach (var detail in remove)
{
    db.logins.DeleteOnSubmit(detail);
}

最后

 try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    // Provide for exceptions.
}

希望这对您有帮助。


2
投票

代替:

db.logins.DeleteOnSubmit(remove);

致电

DeleteAllOnSubmit()
,如下所示:

db.logins.DeleteAllOnSubmit(remove.ToList());

之后请务必致电

db.SubmitChanges()
。您也可以使用
.AsEnumerable()
或 或 。如果这是一个大型删除操作,您可能需要考虑在这种情况下绕过 LINQ。


2
投票

使用此代码即可工作

var remove = (from aremove in db.logins 
             where aremove.username == userNameString 
                && aremove.Password == pwdString 
             select aremove).FirstOrDefault(); 

if(remove != null)
{
     db.logins.Remove(remove);
     db.SaveChanges();
}

1
投票

尝试使用方法first(),如下所示:

var remove = 
    (from aremove in db.logins where aremove.username == userNameString 
    && aremove.Password == pwdString select aremove).first();

db.logins.DeleteOnSubmit(remove);

0
投票

良好实践

 private void DeleteCourse()
        {
            int id = Convert.ToInt32( txtSearch.Text);
            CourseDemoDataContext cdContext = new CourseDemoDataContext();
            course courseobj = cdContext.courses.Single(courses => courses.COURSE_ID == id);
            cdContext.courses.DeleteOnSubmit(courseobj);
            cdContext.SubmitChanges();
        }

0
投票

你可以试试这个,它会对你有用。

linq_testDataContext _DbContext = new linq_testDataContext();
var remove = _DbContext.aremove.where(x=>x.username == userNameString && x.Password == pwdString).FirstOrDefault();
if(remove != null)
{
     db.logins.Remove(remove);
     db.SaveChanges();
}

0
投票

我认为这可以通过使用代码的where()和Tolist()来实现。 。 考虑到 db.logins 是一个数据表,并且 aremove 代表表中的数据行,其中用户名、密码代表要检查的列.., 。 。 linq 可以这样写..,

db.logins.AsEnumerable()
               .Where(aremove  => aremove["username"].ToString() == "userNameString" && aremove["Password"].ToString() == "pwdString")
               .ToList()
               .ForEach(m => m.Delete());   

0
投票

目前在 .net7 或更高版本上

ExecuteDelete
更容易

(from aremove in db.logins
where aremove.username == userNameString && aremove.Password == pwdString
select aremove).ExecuteDelete();
© www.soinside.com 2019 - 2024. All rights reserved.