Как я обновляю таблицу LINQ-SQL, не имея необходимость удалять все существующие записи?

Позволяет говорят, что у меня есть простая таблица, которая только содержит два столбца:

MailingListUser
- Идентификатор PK (интервал)
- FK UserID (интервал)

Мне назвали метод UpdateMailList(IEnumerable<int> userIDs).

То, как делают я, в LINQ, делаю, вставляет для идентификаторов пользователей, которые присутствуют в переданном в параметре, но не существуют в дб, удаляют те, которые находятся в дб, но больше в UserIDs и оставляют тех, которые уже находятся и в дб и в одних только идентификаторах пользователей?

Пользователю дарят список флажка, и когда он сначала загружается, ему выбрали существующих участников для проверенного maillist.

Пользователь может затем проверить и снять флажок с различными пользователями и совершить нападки, "сохраняют". После того как это происходит, я должен обновить состояние базы данных с состоянием контрольного списка.

Вот то, что я делаю теперь:

        public void UpdateMailList(IEnumerable<int> userIDs)
        {
            using (MainDataContext db = new MainDataContext())
            {
                var existingUsers = (from a in db.MailListUsers
                                     select a);

                db.MailListUsers.DeleteAllOnSubmit(existingUsers);
                db.SubmitChanges();


                var newUsers = (from n in userIDs
                                select new MailListUser
                                {
                                    UserID = n
                                });

                db.MailListUsers.InsertAllOnSubmit(newUsers);
                db.SubmitChanges();
            }
        }
    }
}

Существует ли лучший путь, чем простое удаление всех записей в таблице MailingListUser и перевставки всех значений идентификаторов пользователей?

5
задан Bombafet 15 January 2010 в 03:23
поделиться

2 ответа

Что-то вроде этого должно работать:

var existingUsers = from u in db.MailListUsers
                    select u;

var deletedUsers = from u in existingUsers
                   where !userIDs.Contains(u.UserID)
                   select u;

var newUsers = from n in userIDs
               let ids = from u in existingUsers
                         select u.UserID
               where !ids.Contains(n)
               select new MailListUser {
                    UserID = n
               };

db.MailListUsers.DeleteAllOnSubmit(deletedUsers);
db.MailListUsers.InsertAllOnSubmit(newUsers);
db.SubmitChanges();
4
ответ дан 15 December 2019 в 01:02
поделиться

Чтобы запросить пользователей, которые нужно удалить, сделать:

VAR Delusers = от U в db.maillistusers где! userkeys.contains (u.userkey) Выберите U;

db.maillistusers.deleteallLonsubmit (delusers);

Я не уверен, что лучший способ сделать новые записи. Вы могли бы сделать это, но я не уверен, что это самое эффективное:

var neuserkeys = от U в kellkeys где (db.maillistusers.gh где (j => j.userkey == u.userkey) .count () == 0) Выберите U;

Я не на 100% уверен, что будет работать; В качестве альтернативы вы можете выбрать все существующие пользовательские клавиши, а затем пересекайте ссылку против этого:

var neuserkeys = userkeys.gh (i =>! ustralkeys.contains (i.userkey));

снова T знать все последствия производительности.

HTH.

0
ответ дан 15 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: