LINQ внутреннее соединение между перечислимым и таблицей БД
Я пытаюсь определить, какие записи удалить из базы данных, когда пользователь отправляет форму. На странице есть два CheckBoxList, один из которых представляет записи до изменения и один после.
Я могу легко получить выбранные значения, которые должны быть удалены, как это...
//get the items not selected that were selected before
var oldSelectedItems = from oItem in oldChklSpecialNeeds.Items.Cast<ListItem>()
where !(from nItem in newChklSpecialNeeds.Items.Cast<ListItem>()
where nItem.Selected
select nItem.Value).Contains(oItem.Value)
&& oItem.Selected
select oItem.Value;
сейчас я пытаюсь сделать что-то подобное, но это не позволяет...
var itemsToDelete = from specialNeed in db.SpecialNeeds
join oldSelectedItem in oldSelectedItems on specialNeed.SpecialNeedsTypeCd equals oldSelectedItem.Value
where specialNeed.CustomerId == customerId
Я легко могу использовать цикл foreach и.DeleteOnSubmit() для каждого элемента, но я думаю, что есть способ использовать функциональность LINQ и передавать весь результат запроса внутреннего соединения в.DeleteAllOnSubmit()
//like so
db.SpecialNeeds.DeleteAllOnSubmit(itemsToDelete);
Есть идеи?
2 ответа
Локальные коллекции можно использовать в LINQ to SQL с помощью метода Contains(). Вы можете попробовать изменить предложение join на where с помощью Contains():
var itemsToDelete = from specialNeed in db.SpecialNeeds
where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
&& specialNeed.CustomerId == customerId
select ...;
Какую ошибку вы получаете? Это несоответствие типов между SpecialNeedsTypeCd и oldSelectedItem.Value? Вы только что пропустили select во втором операторе Linq в этом посте или это проблема?