【问题标题】:How to delete multiple rows based on a collection of non-primary key field items using LINQ-TO-SQL?如何使用 LINQ-TO-SQL 根据非主键字段项的集合删除多行?
【发布时间】:2010-11-09 20:02:46
【问题描述】:

我有这个专栏,

id int primary key,
code int not null

我想删除代码等于 a 中的一项的所有项,

IEnumerable<int> someEnumerable

一种可能的方法是使用迭代。但我想在没有显式迭代(for,foreach)的情况下做到这一点。另一种方法是这样做:

var result = db.table.Where(a => someEnumerable.Contains(a.code));
db.table.DeleteAllOnSubmit(result);
db.SubmitChanges();

但对我来说,它会导致:

System.Data.Linq.dll 中出现“System.StackOverflowException”类型的未处理异常

【问题讨论】:

  • 2 个问题:哪一行代码导致 StackOverflowException? someEnumerable 是内存中的序列,还是来自数据库的序列?

标签: c# .net linq linq-to-sql collections


【解决方案1】:

here 所述,这是由 Linq 错误引起的,在 .NET 4.0 上已更正

现在包含检测自引用 IQueryable 并且不会导致堆栈溢出

来自 SO 的某处:

在 .NET 3.5 中解决问题:当使用 'Auto Generated Value' = True 时,必须将 'Delay Loaded' 设置为 False - 否则会出现递归错误。

【讨论】:

    【解决方案2】:

    在我看来,您拥有的代码应该可以工作。您可能想尝试缩小异常是来自实体的选择还是实际删除。尝试将 ToList() 添加到查询中,这将强制它运行选择逻辑,然后查看是否在选择期间或删除时抛出异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多