8
votes

C # étrange comportement lambda

Quelqu'un pourrait-il souligner pourquoi cela pourrait se produire:

J'utilise NHibernate et le fournisseur linq pour celui-ci.

Le code qui échoue est listé ici: xxx

débogage indique que séquence (qui est un iquéryable ) Une fois que cela contient 2 éléments, qui ont été ajoutés à la base de données.

Je m'attends au premier déclaration de ce séquence, mais malheureusement, il laisse 0 éléments.

(pourquoi ???)

Le second déclaration, au contraire, donne en réalité 2 éléments car il devrait fonctionner.

Voici le NHibernate -> sqlite requêtes pour les première et seconde < code> où instructions. xxx


maintenant, si je teste le même code avec mon inmemoryrepository , qui stocke toutes les entités dans une liste simple, le (x => true) fonctionne absoluté une amende absoluté.

SO-W Est-ce que cela se produit lors de l'utilisation de NHibernate ? Est-ce un bug ou je fais quelque chose de mal?

merci.


1 commentaires

Il est probablement lié à la façon dont Nhibernate traite l'expression qu'il crée de la Lambda, bien que la bonté sache ce qu'elle fait ...


3 Réponses :


2
votes

Je suppose que ceci est un bogue dans NHibernate basé sur la sortie SQLite que vous montrez. Vous pouvez essayer x => x.id == x.id plutôt que x => vrai et voir si cela fonctionne.


0 commentaires

5
votes

Je ne sais pas NHibernate, mais le problème est évident à partir du SQL généré: votre base de données ne considère pas vrai (minuscule t) égale à la vraie (majuscule t). Dans SQL Server, vous pouvez modifier cela en modifiant la collation de la base de données (qui est une très mauvaise idée, à moins que vous ne souhaitiez une insensibilité des cas pour d'autres raisons).

Je suppose qu'il s'agit d'un bogue dans NHibernate que vous devez travailler. Test t => 1 == 1 au lieu de t => true , ce qui pourrait fonctionner en fonction de la manière dont le code NHibernate est écrit.


0 commentaires

1
votes

ressemble à un bug pour moi. Sa conversion d'une opération booléenne en une évaluation de chaîne, et même qui est vissée, car elle définit la requête avec true et évalue en utilisant true , donc un test sensible à la casse échouer.


0 commentaires