Mit den Änderungen an .NET Core 3.0 bekomme ich
... NavigationExpandingExpressionVisitor 'fehlgeschlagen. Dies kann entweder auf einen Fehler oder eine Einschränkung in EF Core hinweisen. Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=2101433 .) ---> System.InvalidOperationException: Verarbeitung des LINQ-Ausdrucks 'GroupJoin, ...
Dies ist eine wirklich einfache Abfrage, daher muss es eine Möglichkeit geben, sie in .NET CORE 3.0 auszuführen:
var queryResults1 = await patients
.GroupJoin(
_context.Studies,
p => p.Id,
s => s.Patient.Id,
(p, studies) => new
{
p.DateOfBirth,
p.Id,
p.Name,
p.Sex,
Studies =studies.Select(s1=>s1)
}
)
.AsNoTracking().ToListAsync();
Ich suche im Grunde nach einer Linq-Abfrage (oder Methodensyntax wie oben), die Studien zu Patienten verknüpft und Studien auf eine leere Liste oder null setzt, wenn für den angegebenen Patienten keine Studien vorhanden sind.
Irgendwelche Ideen? Dies funktionierte in .NET Core 2.2. Der obige MSFT-Link erwähnt auch, dass die Änderung des Schlüsselbruchs mit der clientseitigen Auswertung zusammenhängt und vermieden wird, dass die generierte Abfrage ganze Tabellen liest, die dann clientseitig verbunden oder gefiltert werden müssen. Bei dieser einfachen Abfrage sollte der Join jedoch serverseitig leicht zu erledigen sein.
quelle
groupby
in linke Verknüpfungen übersetzen, bei denen dadurch nicht mehr Zeilen als erwartet zurückgezogen werden. Ich habe einen entsprechenden Kommentar gepostet .Hatte genau das gleiche Problem und einen großen Kampf damit. Es stellt sich heraus, dass .net Core 3.0 Join oder Groupjoin in der Methodensyntax (noch?) Nicht unterstützt. Der lustige Teil ist jedoch, dass es in der Abfragesyntax funktioniert.
Versuchen Sie dies, es ist Abfragesyntax mit ein bisschen Methodensyntax. Dies führt zu einer korrekten SQL-Abfrage mit einem schönen linken äußeren Join und wird in der Datenbank verarbeitet. Ich habe deine Modelle nicht, also musst du die Syntax selbst überprüfen ...
quelle