2008-10-07 3 views
1

Я пытаюсь определить, какие записи удалять из базы данных, когда пользователь отправляет форму. На странице есть два элемента CheckBoxList, представляющие записи перед изменением и один за другим.LINQ внутреннее соединение betwenn Перечислимое и таблица DB

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

//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 

я легко могу просто использовать цикл Еогеасп и .DeleteOnSubmit() для каждого элемента, но я думаю, что есть способ использовать функциональные возможности LINQ и передать весь результат запроса на внутреннее соединение с .DeleteAllOnSubmit()

//like so 
db.SpecialNeeds.DeleteAllOnSubmit(itemsToDelete); 

Любые идеи?

ответ

4

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

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

.Contains это именно то, что мне нужно! – ctrlShiftBryan 2008-10-08 15:56:42

0

Какая ошибка вы получаете? Является ли это несоответствием типа между SpecialNeedsTypeCd и oldSelectedItem.Value? Вы просто опустили выбор во втором заявлении Linq в этом сообщении или это проблема?