【问题标题】:Deleting rows in a table with Linq to SQL使用 Linq to SQL 删除表中的行
【发布时间】:2012-03-19 04:02:29
【问题描述】:

我有一个体育数据库,其中包含一个表 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)' 的最佳重载方法匹配有一些无效参数

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

【问题讨论】:

  • DeleteOnSubmit 需要一个 GroupMember 类型的对象,并且 linq 查询返回 IQueryable。这就是为什么会出现错误。尝试使用 removeFromGroup.ToList() 代替。

标签: c# asp.net sql linq


【解决方案1】:

你必须调用 .ToList()

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

对于批量删除,我使用this,因为 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

【讨论】:

  • 查看@JeremyWiggins 的回答,有一个DeleteAllOnSubmit() 方法。
  • 这些链接现在已经失效了,你能指出一个新的位置吗?或者最好解释一下它们所说的内容?
  • @AdrianIftode 谢谢!
【解决方案2】:
var listToRemove=(from a in DB.Table
             where a.Equals(id)
             select a).ToList();

DB.Table.DeleteAllOnSubmit(listToRemove);
DB.SubmitChanges();

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2012-12-20
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多