У меня есть запрос LinqToSql, который возвращает массив объектов Article следующим образом:
return db.Articles.ToArray();
Затем я зацикливаюсь на этом массиве и начинаю удалять некоторые элементы, которые соответствуют определенным критериям, для простоты, скажем, я удаляю их все, например:
foreach (var item in array)
db.articles.DeleteOnSubmit(item);
При вызове DeleteOnSubmit (entity) выдается недопустимое исключение операции, в его сообщении говорится: «Невозможно удалить объект, который не был присоединен». Я изменил код, чтобы сначала получить объект, а затем удалить его, и он работал просто отлично. Вот рабочий код:
db.DeleteOnSubmit(db.Articles.Where(c=>c.Id == item.Id))
Теперь я знаю, что это сработало бы, если бы я изменил хранилище так, чтобы он возвращал IQueryable вместо собственного массива, я просто не понимаю, почему? ToArray имеет какое-либо отношение к этому недопустимому исключению операции?
Благодарю.
ps: db - это ссылка на объект DataContext.