LINQ внутреннее соединение между Ienumerable и таблицей БД

StackOverflow https://stackoverflow.com/questions/180422

Вопрос

Я пытаюсь определить, какие записи удаляются из базы данных, когда пользователь отправляет форму. На странице есть два 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); 

Есть идеи?

Это было полезно?

Решение

Локальные коллекции можно использовать в LINQ to SQL с помощью метода Contains (). Вы можете попробовать изменить предложение join на , где с помощью Contains ():

var itemsToDelete = from specialNeed in db.SpecialNeeds
                    where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
                       && specialNeed.CustomerId == customerId
                    select ...;

Другие советы

Какую ошибку вы получаете? Это несоответствие типов между SpecialNeedsTypeCd и oldSelectedItem.Value? Вы только что пропустили select во втором операторе Linq в этом посте или это проблема?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top