Как удалить несколько строк на основе коллекции элементов полей не первичного ключа, используя LINQ-TO-SQL? - PullRequest
1 голос
/ 10 июля 2009

У меня есть эти столбцы,

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

Ответы [ 2 ]

1 голос
/ 21 июля 2009

Как указано здесь это было вызвано ошибкой Linq, исправленной в .NET 4.0

Содержит, теперь обнаруживает IQueryable, ссылающийся на себя, и не вызывает переполнение стека.

Откуда-то в SO:

В .NET 3.5 для решения проблемы: при использовании «Auto Generated Value» = True необходимо установить для параметра «Delay Loaded» значение False - в противном случае вы получите ошибку рекурсии.

0 голосов
/ 10 июля 2009

Мне кажется, что код, который у вас есть, должен работать. Возможно, вы захотите попытаться сузить, происходит ли исключение из выбора объектов или фактического удаления. Попробуйте добавить ToList () к запросу, который заставит его выполнить логику выбора, а затем посмотрите, было ли выброшено исключение во время выбора или удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...