简体   繁体   English

使用Linq to SQL删除表中的行

[英]Deleting rows in a table with Linq to SQL

I have a sports database with a table groupmembers which have the fields ID, groupID and memberID. 我有一个带有表组成员的体育数据库,其中包含字段ID,groupID和memberID。 I get the memberID from a textbox called txtRemoveGroupMember and the groupID from a checkboxlist. 我从一个名为txtRemoveGroupMember的文本框中获取memberID,从checkboxlist中获取groupID。 Now i want to delete the rows wich has both the groupID and the memberID. 现在我想删除同时具有groupID和memberID的行。 I have tried this code: 我试过这段代码:

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();
}

But i get this error: Error 7 Argument 1: cannot convert from 'System.Linq.IQueryable' to 'GSI_side.GroupMember' 但我收到此错误:错误7参数1:无法从'System.Linq.IQueryable'转换为'GSI_side.GroupMember'

And this error: Error 6 The best overloaded method match for 'System.Data.Linq.Table.DeleteOnSubmit(GSI_side.GroupMember)' has some invalid arguments 并且此错误:错误6'System.Data.Linq.Table.DeleteOnSubmit(GSI_side.GroupMember)'的最佳重载方法匹配具有一些无效参数

Hope someone can help me figure this out! 希望有人可以帮我解决这个问题!

You have to call .ToList() 你必须调用.ToList()

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

For batch deletes I use this , because LINQ to SQL first loads the entire data which is going to be deleted, then it does the deletes each by each. 对于批量删除,我使用此方法 ,因为LINQ to SQL首先加载要删除的整个数据,然后按每个删除每个数据。

https://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-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 https://github.com/longday/LINQ-to-SQL-Batch-Updates-Deletes

removeFromGroup is still of type IQuerable . removeFromGroup仍然是IQuerable类型。

You need to specify an actual GroupMember to delete. 您需要指定要删除的实际GroupMember

You could use 你可以用

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


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

Alternatively, if your query returns a collection (from the looks of it, it won't since you are filtering by memberId ) you could use 或者,如果您的查询返回一个集合(从它的外观,它将不会,因为您是由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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM