Pergunta

Eu estou tentando determinar quais registros para excluir um banco de dados quando um usuário envia um formulário. A página tem dois CheckBoxList um representando os registros antes de modificação e um depois.

Eu posso facilmente se os valores selecionados que precisam ser apagados assim ...

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

Agora que eu estou tentando fazer algo assim, mas não está permitindo ...

var itemsToDelete = from specialNeed in db.SpecialNeeds
                           join oldSelectedItem in oldSelectedItems on specialNeed.SpecialNeedsTypeCd equals oldSelectedItem.Value
                           where specialNeed.CustomerId == customerId

Eu posso facilmente basta usar um loop foreach e uma .DeleteOnSubmit () para cada item, mas eu estou pensando que é uma funcionalidade uso maneira de LINQ e passar todo o resultado da consulta de uma junção interna para .DeleteAllOnSubmit ()

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

Todas as idéias?

Foi útil?

Solução

coleções locais podem ser usados ??em LINQ to SQL com o método contains (). Você pode tentar mudar o join cláusula em um , onde com Contém ():

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

Outras dicas

O que é o erro que você está recebendo? É uma incompatibilidade de tipo entre SpecialNeedsTypeCd e oldSelectedItem.Value? Você simplesmente omitiu a selecionar na segunda instrução Linq neste post ou isso é o problema?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top