Domanda

Sto cercando di determinare quali record eliminare da un database quando un utente invia un modulo. La pagina ha due CheckBoxList che rappresentano i record prima della modifica e uno dopo.

Posso facilmente ottenere i valori selezionati che devono essere eliminati in questo modo ...

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

ora sto provando a fare qualcosa del genere ma non lo consente ...

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

Posso facilmente usare un ciclo foreach e un .DeleteOnSubmit () per ogni elemento, ma sto pensando che c'è un modo di usare la funzionalità di LINQ e passare l'intero risultato della query di un join interno a .DeleteAllOnSubmit ()

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

Qualche idea?

È stato utile?

Soluzione

Le raccolte locali possono essere utilizzate in LINQ to SQL con il metodo Contains (). Puoi provare a cambiare la clausola join in una dove con Contains ():

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

Altri suggerimenti

Qual è l'errore che stai riscontrando? È una mancata corrispondenza del tipo tra SpecialNeedsTypeCd e oldSelectedItem.Value? Hai appena omesso la selezione nella seconda istruzione Linq in questo post o è questo il problema?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top