使用Linq to SQL删除表中的行

本文关键字:删除 Linq to SQL 使用 | 更新日期: 2023-09-27 18:26:13

我有一个体育数据库,其中有一个表groupmembers,它有字段ID、groupID和memberID。我从名为txtRemoveGroupMember的文本框中获取memberID,从复选框列表中获取groupID。现在我想删除同时具有groupID和memberID的行。我试过这个代码:

foreach(ListItem listItem in cblRemoveMemberFromGroup.Items)
{
       int memberid = Convert.ToInt32(txtRemoveGroupMember.Text);
       int groupid = Convert.ToInt32(listItem.Value);
       var removeFromGroup = from gm in dataContext.GroupMembers
            where (gm.memberID == memberid) && (gm.groupID == groupid)
            select gm;
       dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup);
       dataContext.SubmitChanges();
}

但我得到了这个错误:

错误7参数1:无法从"System.Linq.IQueryable"转换<GSI_side.GroupMember>'到"GSI_side.GroupMember"

这个错误:

错误6"System.Data.Linq.Table<"的最佳重载方法匹配;GSI_side.GroupMember>。DeleteOnSubmit(GSI_side.GroupMember)"包含一些无效的参数

希望有人能帮我解决这个问题!

使用Linq to SQL删除表中的行

您必须调用.ToList()

var items = removeFromGroup.ToList();
foreach (var item in items)
  dataContext.GroupMembers.DeleteOnSubmit(item);

对于批删除,我使用这个,因为LINQ to SQL首先加载要删除的整个数据,然后逐个删除。

https://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-linq-to-sql/

https://github.com/longday/LINQ-to-SQL-Batch-Updates-Deletes

removeFromGroup仍然属于IQuerable类型。

您需要指定要删除的实际GroupMember

你可以使用

GroupMember removeFromGroup = (from gm in dataContext.GroupMembers
                               where (gm.memberID == memberid) && (gm.groupID == groupid)
                               select gm).SingleOrDefault();

dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup);
dataContext.SubmitChanges();

或者,如果您的查询返回一个集合(从外观上看,它不会返回,因为您是通过memberId进行筛选的),您可以使用

List<GroupMember> removeFromGroup = (from gm in dataContext.GroupMembers
                                     where (gm.memberID == memberid) && (gm.groupID == groupid)
                                     select gm).ToList();

dataContext.GroupMembers.DeleteAllOnSubmit(removeFromGroup);
dataContext.SubmitChanges();
var listToRemove=(from a in DB.Table
             where a.Equals(id)
             select a).ToList();
DB.Table.DeleteAllOnSubmit(listToRemove);
DB.SubmitChanges();