//A query to a local object
var deletionCommands = commands
.Where(a => a.Operation != Operation.Addition)
.Select(a => new { a.Prestador.cod_prestador, a.Prestador.cod_desdobramento })
;
//A Linq-To-SQL query
var toDelete = db.Prestadors
.Where(a => deletionCommands.Contains(new { a.cod_prestador, a.cod_desdobramento }))
;
db.Prestadors.DeleteAllOnSubmit(toDelete);
db.SubmitChanges();
Единственное, что разрешило проблему, это явный цикл:
foreach (var command in commands)
{
if(command.Operation != Operation.Addition)
{
var toDelete = db.Prestadors
.Where(a =>
a.cod_prestador == command.Prestador.cod_prestador &&
a.cod_desdobramento == command.Prestador.cod_desdobramento
);
db.Prestadors.DeleteAllOnSubmit(toDelete);
}
}
db.SubmitChanges();
Это действительно ошибка, и она была скорректирована в LINQ 4.0
http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
Устойчивость запросов Содержит теперь обнаружение саморегуляции IQueryable и не вызывает переполнение стека
EDIT В .NET 3.5 для решения проблемы: при использовании "Auto Generated Value" = True, вы должны установить "Delay Loaded" в False - в противном случае вы получите ошибку рекурсии.
EDIT2 Решение выше не работает.
Я знаю, что это уже старый пост, но изменение метода Contains на Equals также работало для меня.
Это не выполняется с помощью StackOverflowException
Dim iLottery Как IEnumerable (из лотереи) = Из лотереи2 В комбинированном2, где нет (из лотереи1 В комбинированном выборе лотереи1.NUMBER). Консоли (лотерея2.NUMBER) Выберите лотерею2
Это не
Dim iLottery Как IEnumerable (из лотереи) = Из лотереи2 В комбинированном2, где нет (из лотереи1 В комбинации Выберите лотерею1.NUMBER).Equals(lottery2.NUMBER) Выберите лотерею2
Поместите точку останова в последнюю строку, затем запустите код. Затем, когда он останавливается на точке останова, добавьте еще одну точку останова в начале этого фрагмента кода. Затем продолжайте работу в отладчике (перейдите). Он должен попасть в новую точку останова, и вы можете проверить стек, чтобы увидеть, как он перезвонил сам.
Какова реализация свойства Operation
? Возможно, это рекурсивное обращение к другому коду.