Avec les modifications apportées à .NET Core 3.0, je reçois
... Échec de NavigationExpandingExpressionVisitor. Cela peut indiquer un bogue ou une limitation dans EF Core. Voir https://go.Microsoft.com/fwlink/?linkid=21014 pour plus d'informations.) ---> System.InvalidOperationException: traitement de l'expression LINQ 'GroupJoin, ...
Il s'agit d'une requête très simple, il doit donc y avoir un moyen de l'exécuter dans .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();
Je recherche essentiellement une requête Linq (ou une syntaxe de méthode comme ci-dessus) qui joindra les études aux patients et définira les études sur une liste vide ou nulle s'il n'y a pas d'études pour le patient donné.
Des idées? Cela fonctionnait dans .NET Core 2.2. Le lien MSFT ci-dessus mentionne également que le changement de rupture de clé est lié à l'évaluation côté client et évite que la requête générée ne lit des tables entières qui doivent ensuite être jointes ou filtrées côté client. Cependant, avec cette simple requête, la jointure doit être facilement réalisable côté serveur.
Eu exactement le même problème et une grande lutte avec lui. Il s'avère que .net Core 3.0 ne prend pas en charge Join ou Groupjoin dans la syntaxe de la méthode (pour le moment?). La partie amusante est cependant, cela fonctionne dans la syntaxe de requête.
Essayez ceci, c'est la syntaxe de requête avec un peu de syntaxe de méthode. Cela se traduit bien par la requête SQL correcte avec une jointure externe Nice gauche et elle est traitée dans la base de données. Je n'ai pas vos modèles, vous devez donc vérifier vous-même la syntaxe ....
var queryResults1 =
(from p in _context.patients
from s in _context.Studies.Where(st => st.PatientId == p.Id).DefaultIfEmpty()
select new
{
p.DateOfBirth,
p.Id,
p.Name,
p.Sex,
Studies = studies.Select(s1 => s1)
}).ToListAsync();