LINQ innere Verknüpfung zwischen IEnumerable und DB Tabelle
-
05-07-2019 - |
Frage
Ich versuche, zu bestimmen, welche aus einer Datenbank löschen aufzeichnen kann, wenn ein Benutzer ein Formular einreicht. Die Seite hat zwei CheckBoxList ein, die die Datensätze vor der Modifikation und einem nach.
Ich kann leicht die ausgewählten Werte erhalten, die wie folgt ...
gelöscht werden müssen//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;
jetzt versuche ich, so etwas zu tun, aber es ist so dass es nicht ...
var itemsToDelete = from specialNeed in db.SpecialNeeds
join oldSelectedItem in oldSelectedItems on specialNeed.SpecialNeedsTypeCd equals oldSelectedItem.Value
where specialNeed.CustomerId == customerId
Ich kann leicht benutzen Sie einfach eine foreach-Schleife und eine .DeleteOnSubmit () für jeden Punkt, aber ich denke, es eine Möglichkeit Gebrauch Funktionalität von LINQ ist und das gesamte Abfrageergebnis einer inneren passiere beitreten zu .DeleteAllOnSubmit ()
//like so
db.SpecialNeeds.DeleteAllOnSubmit(itemsToDelete);
Irgendwelche Ideen?
Lösung
Lokale Sammlungen können in LINQ verwendet werden, mit dem Inhalt () -Methode SQL. Sie können versuchen, die Änderung der beitreten Klausel in ein mit mit Enthält ():
var itemsToDelete = from specialNeed in db.SpecialNeeds
where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
&& specialNeed.CustomerId == customerId
select ...;
Andere Tipps
Was ist der Fehler, den Sie bekommen? Ist es ein Typenkonflikt zwischen SpecialNeedsTypeCd und oldSelectedItem.Value? Haben Sie gerade die Auswahl in der zweiten Linq-Anweisung in diesem Beitrag verzichtet oder ist das das Problem?