我有这个简单的代码,但它显示错误。我不知道我哪里错了。 它显示最后一行有错误。
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);
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);
}
您缺少 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.
}
希望这对您有帮助。
代替:
db.logins.DeleteOnSubmit(remove);
DeleteAllOnSubmit()
,如下所示:
db.logins.DeleteAllOnSubmit(remove.ToList());
之后请务必致电
db.SubmitChanges()
。您也可以使用 .AsEnumerable()
或 或 。如果这是一个大型删除操作,您可能需要考虑在这种情况下绕过 LINQ。
使用此代码即可工作
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();
}
尝试使用方法first(),如下所示:
var remove =
(from aremove in db.logins where aremove.username == userNameString
&& aremove.Password == pwdString select aremove).first();
db.logins.DeleteOnSubmit(remove);
良好实践
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();
}
你可以试试这个,它会对你有用。
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();
}
我认为这可以通过使用代码的where()和Tolist()来实现。 。 考虑到 db.logins 是一个数据表,并且 aremove 代表表中的数据行,其中用户名、密码代表要检查的列.., 。 。 linq 可以这样写..,
db.logins.AsEnumerable()
.Where(aremove => aremove["username"].ToString() == "userNameString" && aremove["Password"].ToString() == "pwdString")
.ToList()
.ForEach(m => m.Delete());
目前在 .net7 或更高版本上
ExecuteDelete
更容易
(from aremove in db.logins
where aremove.username == userNameString && aremove.Password == pwdString
select aremove).ExecuteDelete();