Ich habe eine ziemlich komplexe SQL-Anweisung mit Joins. Hier ist mein Code mit EF:Verwenden (linq?) Mit ef-Entitäten
var MicrositeResponseAdors = _context.MicrositeResponseAdor
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.AddTradeIn)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.TrackingFinance)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.SearchTracking)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.TrackingType)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.Vehicle)
.FirstOrDefault(m => m.Id == id && m.FirstName.ToLower() != "test" && m.LastName.ToLower() != "test");
Ich muss eine andere hinzufügen zu einem Tisch sitzen, die keinen Primärschlüssel hat, die Entity Framework nicht gestattet. Ich konnte es nicht einmal vortäuschen. Also wurde mir gesagt, ich solle etwas Brauchbarer machen mit dem, was ich glaube, heißt LINQ?
Ich kann nicht herausfinden, wie meine Datenwerte mit den ursprünglichen EF-Entity-Klassen zugeordnet werden. Hier ist, was ich bisher:
var MicrositeResponseAdors = (from p in _context.MicrositeResponseAdor
join c in _context.UserTracking on p.Id equals c.UserTrackingId
into pc
select new {
MicrositeResponseAdor = p, MicrositeResponseAdor.UserTracking = pc
}
).FirstOrDefault();
Das gibt:
ungültig anonymen Typ Mitglied declarator.
Ich denke, das ist wegen des ersten Teils von MicrositeResponseAdor.UserTracking. Ich bin nicht sicher, wie man UserTracking unter dem MicrositeResponseAdor zuweist.
Joins in einem ORM sind ein extrem starker Geruch. ORMs behandeln * Objekte * mit * Relationen *. ORMs sind keine Datenbanken und LINQ ist kein Ersatz für SQL. –
Sie müssen der MicroSiterResponseAdor-Klasse eine weitere * Relation * hinzufügen. Wahrscheinlich nur ein 'public UserTracking UserTracking {get; set;}'. EF wird die Beziehung erkennen, wenn die Tabellen, Felder den Konventionen folgen, was sie zu tun scheinen. Die Abfrage muss sich überhaupt nicht ändern. –
BTW der von Ihnen gepostete EF-Code zeigt keine Joins. Nur eine * einzelne * Entity lädt. All diese 'Includes' erzwingen eifriges Laden, sie haben überhaupt nichts mit Joins zu tun.Sie könnten sie sogar loswerden, wenn Sie kein eifriges Laden benötigen –