J'ai deux requêtes similaires qui reviennent théoriquement les mêmes résultats:Comportement inattendu Linq - ToList()
var requestNotWorking = SessionManagement.Db.Linq<Item>(false).Where(i =>
i.Group != null && i.Group.Id == methodParameter)
.ToList();
Cette demande renvoie 0 articles, même si elle est censée retourner un. Voici une réécriture de ce dernier, mais avec un appel à la méthode ToList()
. Cette requête fonctionne et renvoie l'élément attendu dans la première requête!
var requestWorking = SessionManagement.Db.Linq<Item>(false).ToList().Where(i =>
i.Group != null && i.Group.Id == methodParameter).ToList();
Note: SessionManagement.Db.Linq<Item>(false)
est un Linq générique à la méthode Nhibernate avec l'attribut booléen déterminant si doit être exécutée la demande dans le cache (true) ou la base de données (false). Il n'y a apparemment rien de mal dans cette méthode car cela fonctionne normalement dans beaucoup d'autres parties de la solution. La cartographie de l'article n'a rien de fantaisie: pas de sacs et les paramètres suivants: lazy="false" schema="dbo" mutable="false" polymorphism="explicit"
Pourquoi est-ce ainsi?
Modifier:
La requête SQL généré des requestNoWorking se termine par:
(Item.Group_ID is not null) and [email protected]',N'@p0 int',@p0=11768
La requête SQL généré de requestWorking est à peu près un select * from dbo.Items
Si vous utilisez Sql Server, avez-vous essayé d'exécuter SQL Profiler lors de l'exécution de ces deux requêtes? – nerdybeardo
i.Group diffère entre les deux. Nom identique, mais complètement différent quand sur différents types de collections. –
Veuillez publier le code SQL généré. Il y a une différence sémantique entre ce que le SQL fait et ce que la sémantique C# dicte. LINQ ne promet pas de sémantique identique. – usr