Könnte jemand darauf hinweisen, warum dies passieren könnte:
Ich verwende NHibernate
und den Linq
Provider dafür.
Der fehlgeschlagene Code ist hier aufgeführt:
%Vor% Das Debugging zeigt an, dass sequence
(was ein IQueryable<T>
ist), nachdem dieses 2 Elemente enthält, die zur Datenbank hinzugefügt wurden.
Ich erwarte, dass die erste Where
-Anweisung alle Elemente dieser Sequenz liefert, aber leider bleiben 0 Elemente übrig.
Die zweite Where
Aussage liefert hingegen 2 Elemente, wie es funktionieren sollte.
Hier sind die NHibernate -> Sqlite
-Abfragen für die erste und zweite Where
-Anweisung.
Wenn ich jetzt denselben Code mit meinem InMemoryRepository
teste, der jedes Element in einer einfachen Liste speichert, funktioniert (x => true)
absolut gut.
Also - warum passiert das, wenn NHibernate
verwendet wird? Ist das ein Fehler oder mache ich etwas falsch?
Danke.
Ich kenne NHibernate nicht, aber das Problem ist offensichtlich aus dem generierten SQL: Ihre Datenbank betrachtet nicht wahr (Kleinbuchstabe t) gleich True (Großbuchstabe T). Im SQL-Server können Sie dies ändern, indem Sie die Datenbanksortierung ändern (was eine wirklich schlechte Idee ist, wenn Sie aus anderen Gründen keine Groß- / Kleinschreibung beachten wollen).
Ich vermute, das ist ein Fehler in NHibernate, den Sie umgehen müssen. Testen Sie t => 1 == 1
anstelle von t => true
, was abhängig davon, wie der NHibernate-Code geschrieben wird, funktioniert.
Ich vermute, dass dies ein Fehler in NHibernate ist, der auf der von Ihnen angezeigten SqLite-Ausgabe basiert. Sie könnten X => X.Id == X.Id
anstatt X => true
ausprobieren und sehen, ob das funktioniert.
Sieht für mich wie ein Fehler aus. Es konvertiert eine boolesche Operation in eine String-Auswertung, und selbst das ist vermasselt, da es die Abfrage mit true
einrichtet und mit True
auswertet, so dass ein Test unter Berücksichtigung der Groß- und Kleinschreibung fehlschlägt.
Tags und Links c# linq lambda nhibernate iqueryable