Brauche Hilfe für eine LINQ Abfrage
Hallo,
ich bin noch relativ neu im Thema LINQ und bräuchte deshalb etwas Unterstützung für eine Abfrage.
Ich habe 3 Tabellen, eine Tabelle "MediaInfo" beinhaltet Informationen über z.B. eine DVD. Die beiden anderen Tabellen "History" und "Collection" haben jeweils die Felder "ID", "Timestamp", "DVDDBID" und einen ForeignKey auf die Tabelle "MediaInfo" über die Felder "DVDDBID" = "DVDDBID"
Beim hinzufügen der Datensätze in die Tabellen "History" und "Collection" prüfe ich auch ob der Datensatz in der "MediaInfo" vorhanden ist und wenn nicht dann füge ich den da auch hinzu.
Ich lösche auch aus den Tabellen "History" und "Collection" da wird aber momentan nicht aus der "MediaInfo" gelöscht und genau da ist mein Problem. Ich brauche ein Statement der in den Tabellen "History" und "Collection" nachschaut und die Datensätze aus der "MediaInfo" löscht die in den anderen Tabellen nicht vorhanden sind.
Mit SQL würde ich das folgendermaßen schreiben:
Code:
DELETE FROM [MediaInfo] WHERE ([DVDDBID] NOT IN (SELECT [DVDDBID] FROM [History])) AND ([DVDDBID] NOT IN (SELECT [DVDDBID] FROM [Collection]))
Aber wie schreibe ich das in LINQ?
MfG Johann Löwen
AW: Brauche Hilfe für eine LINQ Abfrage
Das würde in Linq(Mit EntityFramework) ungefähr so aussehen. Dabei werden die Delete Anfragen alle zusammen an die Datenbank geschickt(Das ist eine Transaktion)
Code:
using(var dataContext = GetDataContext())
{
var query = dataContext.MediaInfo.Where(a=> dataContext.History.Any(history => history.DVDID == a.DVDID)).Where(a=> dataContext.Collection.Any(collection => collection.DVDID == a.DVDID))
foreach(var item in query){
dataContext.MediaInfo.DeleteObject(item);
}
dataContext.SaveChanges();
}