2011-01-21 4 views
0

У меня есть экран, на котором пользователь может выбрать категории, на которые они хотят подписаться. Они могут выбирать нулевые для многих категорий. Они сохраняются в таблице UserCategory, которая имеет идентификатор пользователя и идентификатор категории.Помощь с запросом Linq

Итак, если пользователь выбирает 2 из 8 категорий, я пишу две строки с идентификаторами категорий и идентификатором пользователя.

(Он теперь приписан к двум категориям)

Однако, если пользователь возвращается, и отменяет одну из категорий, а затем добавляют 2 различных категорий, он будет назначен на 3 категорию ...

Но я не уверен в том, чтобы справиться с этим в linq ... Как-то мне нужно сделать что-то вроде ... УДАЛИТЬ ИЗ UserCategories, где userId =: UserId и CategoryId NOT IN int [] идентификаторов категории пройден in .... И тогда мне нужно ВСТАВИТЬ В UserCategories ... идентификаторы категории int [], но не те, которые уже существуют.

И мне нужно сделать это в Linq, используя Entity Framework ... Может ли кто-нибудь помочь?

ответ

2

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

Итак, вы должны прочитать текущую информацию из базы данных и представить ее в форме. Затем, когда пользователь нажимает «ОК», очищает текущую информацию в базе данных (сохраняя копию в памяти, конечно), а затем добавляя ее обратно, как будто это был первый раз через код.

+0

Спасибо @ChrisF - Это, безусловно, вариант, который я, возможно, буду использовать. Я могу удалить из таблицы, где UserId =: UserId, а затем повторно добавить на основе int [] категорий. Это довольно легко и очень быстро, поэтому я могу пойти по этому маршруту. Просто ожидая, есть ли другие способы - потому что я храню данные аудита (была создана дата Link, и кто был создан). Выполнение этого метода приведет к удалению всех данных аудита. – Craig

+0

@cdotlister - Необходимые данные аудита усложнят ситуацию. Хм. Не уверен, как действовать в этом случае. – ChrisF

+0

Я пошел по этому маршруту ... так как это связующая таблица и просто используется для помощи пользователю в выборе, я решил, что в этом случае нам не нужно проверять таблицу. Пользователь - единственный человек, который может это изменить. Это предпочтение. Итак, сделано. Благодарю. – Craig