LINQ junção interna entre IEnumerable e DB Tabela
-
05-07-2019 - |
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?
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?