2008-10-07 6 views
1

J'essaie de déterminer quels enregistrements à supprimer d'une base de données lorsqu'un utilisateur soumet un formulaire. La page a deux CheckBoxList représentant les enregistrements avant modification et un après.LINQ jointure interne entre Enumerable et DB Table

je peux facilement obtenir les valeurs sélectionnées qui doivent être supprimés comme ça ...

//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 je suis en train de faire quelque chose comme ça, mais il ne permet pas ... il

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 y a une façon d'utiliser la fonctionnalité de LINQ et passer le résultat de la requête entière d'une jointure interne à .DeleteAllOnSubmit()

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

Des idées?

Répondre

4

Les collections locales peuvent être utilisées dans LINQ to SQL avec la méthode Contient(). Vous pouvez essayer de changer la rejoindre clause dans un par Contient():

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

.Contains est exactement ce que je avais besoin! – ctrlShiftBryan

0

Quelle est l'erreur que vous obtenez? Est-ce une incompatibilité de type entre SpecialNeedsTypeCd et oldSelectedItem.Value? Avez-vous simplement omis le select dans la deuxième déclaration Linq dans ce post ou est-ce le problème?

Questions connexes