Wraz ze zmianami w .NET Core 3.0 otrzymuję
... NavigationExpandingExpressionVisitor 'nie powiodło się. Może to wskazywać na błąd lub ograniczenie w EF Core. Bardziej szczegółowe informacje można znaleźć na https://go.microsoft.com/fwlink/?linkid=2101433 .) ---> System.InvalidOperationException: Przetwarzanie wyrażenia LINQ „GroupJoin, ...
To jest naprawdę proste zapytanie, więc musi istnieć sposób na wykonanie go w .NET CORE 3.0:
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();
Zasadniczo szukam zapytania Linq (lub składni metody jak wyżej), które połączy Studia nad Pacjentami i ustawi Studia na pustą listę lub zero, jeśli nie ma badań dla danego pacjenta.
Jakieś pomysły? Działa to w .NET Core 2.2. Również powyższy link MSFT wspomina, że zmiana podziału klucza jest związana z oceną po stronie klienta i unikaniem, aby wygenerowane zapytanie odczytywało całe tabele, które następnie należy połączyć lub przefiltrować po stronie klienta. Jednak przy tym prostym zapytaniu połączenie powinno być łatwe do wykonania po stronie serwera.
źródło
groupby
w lewe złączenia, w których nie spowoduje to cofnięcia większej liczby wierszy niż oczekiwano. Odpowiednio opublikowałem komentarz .Miałem dokładnie ten sam problem i wielką walkę. Okazuje się, że .net Core 3.0 nie obsługuje Join lub Groupjoin w składni metod (jeszcze?). Zabawne jest to, że działa w składni zapytania.
Spróbuj, to składnia zapytania z odrobiną metody. To przekłada się ładnie na prawidłowe zapytanie SQL z ładnym lewym złączeniem zewnętrznym i jest przetwarzane w bazie danych. Nie mam twoich modeli, więc musisz sam sprawdzić składnię ...
źródło