我有这些专栏,
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”类型异常
答案 0 :(得分:1)
如前所述here它是由Linq错误导致的,在.NET 4.0上已得到纠正
包含现在检测自引用IQueryable并且不会导致堆栈溢出
来自SO的某个地方:
在.NET 3.5中解决问题:当使用“Auto Generated Value”= True时,必须将“Delay Loaded”设置为False - 否则会出现递归错误。
答案 1 :(得分:0)
在我看来,你所拥有的代码应该起作用。您可能希望尝试缩小异常是来自实体的选择还是实际删除。尝试向查询添加ToList(),这将强制它运行选择逻辑,然后查看在选择期间或删除时是否抛出异常。