2009-07-10 20 views
1

我有這個列,如何使用LINQ-TO-SQL基於非主鍵字段項的集合刪除多行?

id int primary key, 
code int not null 

我想刪除其中的代碼等於在其中一個項目的所有項目,

IEnumerable<int> someEnumerable 

一種可能的方式是使用迭代。但是我希望沒有明確的迭代(for,foreach)。另一種方法是這樣:

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

但對我來說它的原因:

類型 'System.StackOverflowException' 未處理的異常發生在System.Data.Linq.dll

+0

2問題: 哪行代碼導致StackOverflowException? SomeEnumerable是一個內存中的序列,還是來自數據庫的東西? – 2009-07-10 19:50:31

回答

1

如前所述here它是由一個LINQ的錯誤引起的,在.NET 4.0

糾正

現在包含檢測自引用的IQueryable並不會導致堆棧溢出

從某處SO:

在.NET 3.5解決的問題:當使用「自動生成的值」 = true,則必須設置「延遲加載」到假 - 否則,你得到遞歸錯誤。

0

它看起來像我的代碼應該工作。您可能想要嘗試縮小該異常是來自實體的選擇還是實際的刪除。嘗試將ToList()添加到查詢中,這將強制它運行選擇邏輯,然後查看在選擇或刪除期間是否拋出異常。