Il n'y a pas grand-chose à répondre ici. Si votre outil ORM ne produit pas la requête SQL attendue à partir d'une simple requête LINQ, vous ne pouvez en aucun cas le laisser faire en réécrivant la requête (et vous ne devriez pas le faire en premier lieu).
EF Core a un concept d'évaluation mixte client/base de données dans les requêtes LINQ ce qui leur permet de publier des versions EF Core avec un traitement des requêtes incomplet/très inefficace comme dans votre cas.
Extrait de Fonctionnalités absentes d'EF Core (notez le mot pas ) et Feuille de route :
Sous peu, ils envisagent d'améliorer le traitement des requêtes, mais nous ne savons pas quand cela se produira et à quel niveau (rappelez-vous que le mode mixte leur permet de considérer que la requête "fonctionne").
Alors, quelles sont les options ?
- Tout d'abord, éloignez-vous d'EF Core jusqu'à ce qu'il devienne vraiment utile. Revenez à EF6, il n'y a pas de tels problèmes.
- Si vous ne pouvez pas utiliser EF6, restez à jour avec la dernière version d'EF Core.
Par exemple, dans les v1.0.1 et v1.1.0, votre requête génère le SQL prévu (testé), vous pouvez donc simplement mettre à niveau et le problème concret aura disparu.
Mais notez qu'avec les améliorations, les nouvelles versions introduisent des bugs/régressions (comme vous pouvez le voir ici EFCore renvoie trop de colonnes pour une simple jointure LEFT OUTER par exemple), alors faites-le à vos risques et périls (et considérez à nouveau la première option, c'est-à-dire Lequel vous convient le mieux :)