Простой запрос LINQ для удаления из DataContext, где ID == ID - PullRequest
5 голосов
/ 01 июля 2011

Я получаю идентификатор записи в таблице базы данных в моем коде и пытаюсь найти простой запрос LINQ для удаления записи на основе идентификатора.

Вот что у меня есть:

DataContext.Items.DeleteObject((Item)DataContext.Items.Where(item => item.ItemId == selectedId));

Это дает мне ошибку приведения, и мне интересно, есть ли лучший способ сделать это?Я посмотрел на похожие вопросы, и каждый ответ, который я вижу, кажется более сложным, чем это должно быть на самом деле, поэтому любые предложения будут великолепны!

Ответы [ 2 ]

11 голосов
/ 01 июля 2011

В настоящее время у вас есть IQueryable<Item>, а не Item - используйте Single(), чтобы получить сам элемент:

var item = DataContext.Items.Where(item => item.ItemId == selectedId).Single();
DataContext.Items.DeleteObject(item);

Это предполагает один соответствующий элемент (идентификатор в качестве первичного ключа), в противном случае рассмотрите возможность использованияFirst() из FirstOrDefault() с пустой проверкой или, если у вас есть коллекция элементов, просто удалите их в цикле:

var items = DataContext.Items.Where(item => item.ItemId == selectedId);
foreach(var item in items)
  DataContext.Items.DeleteObject(item);
2 голосов
/ 01 июля 2011
DataContext.Items.DeleteObject((Item)DataContext.Items.Where(item => item.ItemId == selectedId).First());

Не забудьте предотвратить ошибку, вам необходимо убедиться, что проверяемый идентификатор имеет фактический Item. Примерно так, например:

var item = (Item)DataContext.Items.Where(item => item.ItemId == selectedId).FirstOrDefault();

if (item != null) {
    DataContext.Items.DeleteObject(item);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...