Twi*_*tar 11 c# sql linq asp.net
我有一个带有表组成员的体育数据库,其中包含字段ID,groupID和memberID.我从一个名为txtRemoveGroupMember的文本框中获取memberID,从checkboxlist中获取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();
}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:错误7参数1:无法从'System.Linq.IQueryable'转换为'GSI_side.GroupMember'
并且此错误:错误6'System.Data.Linq.Table.DeleteOnSubmit(GSI_side.GroupMember)'的最佳重载方法匹配具有一些无效参数
希望有人可以帮我解决这个问题!
Adr*_*ode 16
你必须调用.ToList()
var items = removeFromGroup.ToList();
foreach (var item in items)
dataContext.GroupMembers.DeleteOnSubmit(item);
Run Code Online (Sandbox Code Playgroud)
对于批量删除,我使用此方法,因为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();
Run Code Online (Sandbox Code Playgroud)
或者,如果您的查询返回一个集合(从它的外观,它将不会,因为您正在过滤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();
Run Code Online (Sandbox Code Playgroud)