C # seltsames Lambda-Verhalten

8

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.

(WARUM ???)

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.

%Vor%

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.

    
Yippie-Ki-Yay 08.02.2011, 15:02
quelle

3 Antworten

5

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.

    
erikkallen 08.02.2011, 15:10
quelle
2

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.

    
Mitchel Sellers 08.02.2011 15:05
quelle
1

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.

    
Will 08.02.2011 15:11
quelle