C# 使用Linq to SQL删除表中的行

C# 使用Linq to SQL删除表中的行,c#,asp.net,sql,linq,C#,Asp.net,Sql,Linq,我有一个体育数据库,其中有一个groupmembers表,表中有ID、groupID和memberID字段。我从一个名为txtRemoveGroupMember的文本框中获取memberID,从复选框列表中获取groupID。现在我想删除既有groupID又有memberID的行。 我尝试过以下代码: foreach(ListItem listItem in cblRemoveMemberFromGroup.Items) { int memberid = Convert.ToInt

我有一个体育数据库,其中有一个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'

这个错误是:

错误6“System.Data.Linq.Table.DeleteOnSubmit(GSI_side.GroupMember)”的最佳重载方法匹配具有一些无效参数

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

你必须打电话给.ToList()

对于批删除,我使用LINQtoSQL,因为LINQtoSQL首先加载要删除的整个数据,然后逐个进行删除


从组中移除
的类型仍然是
可操作的

您需要指定要删除的实际
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();
List removeFromGroup=(来自dataContext.GroupMembers中的gm
其中(gm.memberID==memberID)&&(gm.groupID==groupID)
选择gm.ToList();
dataContext.GroupMembers.DeleteAllOnSubmit(removeFromGroup);
dataContext.SubmitChanges();

DeleteOnSubmit需要GroupMember类型的对象,linq查询返回IQueryable。这就是为什么我们会出现错误。尝试改用removeFromGroup.ToList()。请参阅@JeremyWiggins的答案,这里有一个DeleteAllOnSubmit()方法。这些链接现在已失效,您能指出一个新的位置吗?或者最好解释一下它们说了什么?@AdrianIftode谢谢!
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();