Как определить набор записей, которые нужно удалить, используя LinqToSql, где нет другого набора? - PullRequest
1 голос
/ 06 октября 2009

У меня есть ежедневный XML-канал, который содержит все записи каждый день. Они должны быть обработаны и загружены в базу данных, то есть те, которые не включены в фид для дня 2, которые были в фиде дня 1, должны быть удалены, и любые различия должны вызывать обновление базы данных. Мой текущий подход состоит в том, чтобы обновить каждую включенную запись с обработанной датой и затем удалить все записи, не обработанные в тот день.

Однако для этого необходимо, чтобы каждая запись обновлялась каждый день, и мне было интересно, есть ли лучший способ?

В настоящее время я загружаю файл XML и нахожу в моем dbcontext каждую запись, которая в настоящее время существует для каждой записи в XML, следующим образом:

return (from venue in db.Venues 
where venue.id = xmlVenueId
select venue).FirstOrDefault();

если оно существует, тогда я обновляю все поля с информацией о текущем xml-файле, а если оно не существует, я создаю новое. Если все поля одинаковы, база данных не обновляется.

Когда я обработал все записи, мне нужно удалить все записи, которые не были затронуты.

Как мне составить список всех найденных мест (следует ли извлечь первичные ключи, а затем добавить в список или взять все место) и как будет выглядеть запрос linq2Sql, чтобы найти все записи, отсутствующие в этом списке?

1 Ответ

0 голосов
/ 06 октября 2009

Не уверен, что это лучший способ, но, похоже, работает:

Я создаю List<int> venuePrimaryKeys, затем выполняю следующий запрос:

from venue in db.Venues
where ! venuePrimaryKeys.Contains(venue.id)
select venue

Затем я могу пройти по результирующим IQueryable и DeleteOnSubmit каждому месту в результирующем списке.

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