Question

J'essaie de déterminer les enregistrements à supprimer d'une base de données lorsqu'un utilisateur soumet un formulaire. La page contient deux listes CheckBoxList, l’une représentant les enregistrements avant modification et l’autre après.

Je peux facilement obtenir les valeurs sélectionnées qui doivent être supprimées comme ceci ...

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

maintenant j'essaie de faire quelque chose comme ça mais ça ne le permet pas ...

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

Je peux facilement utiliser une boucle foreach et un .DeleteOnSubmit () pour chaque élément, mais je pense qu'il existe un moyen d'utiliser la fonctionnalité de LINQ et de transmettre l'ensemble du résultat de la requête d'une jointure interne à .DeleteAllOnSubmit ()

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

Des idées?

Était-ce utile?

La solution

Les collections locales peuvent être utilisées dans LINQ to SQL avec la méthode Contains (). Vous pouvez essayer de changer la clause join en avec Contains ():

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

Autres conseils

Quelle est l'erreur que vous obtenez? S'agit-il d'une incompatibilité de type entre SpecialNeedsTypeCd et oldSelectedItem.Value? Avez-vous simplement omis de sélectionner l'élément sélectionné dans la deuxième déclaration Linq de ce message ou est-ce le problème?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top