Hallo,
ich hadere gerade mit der Welt. Folgendes funktioniert nicht. Ich erhalte keine Datensätze zurück, zu erwarten sind 50.
Einzelheiten:
Datenbank: PostgreSQL
Entity Framework 6 (Npgsql)
.Net Framework 4.7
Typ von "Buchungstag" in Datenbank: date
Typ von Buchungstag in C#: DateTime?
Lasse ich die Where-Clauses weg, erhalte ich alle Datensätze aus der entsprechenden Tabelle und ich kann auch nach anderen Parameter (z.B. dem Primärschlüssel) filtern. Alles geht.
Geht man ins Netz und sucht, findet man, dass LINQ to Entity kein DateTime kennt. Trotzdem meckert der Compiler nicht. Die Beispiele im Netz nennen
Warum macht LINQ to Entity hier solche Mucken und wie sieht ein Workround aus? Das Filtern nach Datumse ist doch eine mehr als übliche Anforderungen an Datenbank-Abfragen.
Gruß
MQ
PS.: Das Konstrukt funktioniert übrigens unter .NetCore. daraus habe ich es kopiert und war erstmal überrascht, dass es unter .NET Framework nicht geht.
ich hadere gerade mit der Welt. Folgendes funktioniert nicht. Ich erhalte keine Datensätze zurück, zu erwarten sind 50.
C#-Quellcode
- public List<GiroEntry> DownloadGiro(string datumStart, string datumEnde) {
- List<GiroEntry> res = null;
- DateTime? start = DateTime.Parse("01.02.2021");
- DateTime? ende = DateTime.Parse("28.02.2021");
- try {
- using (KontoEntities db = new KontoEntities()) {
- res = db.tblGiro.Where(x => x.Buchungstag >= start)
- .Where(x => x.Buchungstag <= ende).ToList();
- }
- }
- catch (Exception ex) {
- err.Message = ex.Message;
- err.Methode = MethodInfo.GetCurrentMethod().Name;
- err.Modul = this.GetType().Name;
- //err.Show();
- }
- return res;
- }
Einzelheiten:
Datenbank: PostgreSQL
Entity Framework 6 (Npgsql)
.Net Framework 4.7
Typ von "Buchungstag" in Datenbank: date
Typ von Buchungstag in C#: DateTime?
Lasse ich die Where-Clauses weg, erhalte ich alle Datensätze aus der entsprechenden Tabelle und ich kann auch nach anderen Parameter (z.B. dem Primärschlüssel) filtern. Alles geht.
Geht man ins Netz und sucht, findet man, dass LINQ to Entity kein DateTime kennt. Trotzdem meckert der Compiler nicht. Die Beispiele im Netz nennen
DbFunctions.TruncateTime
um vom DateTime den Zeitteil abzuspalten. Ich vergleiche aber keine Strings sondern echte(?) DateTime und die Bedingungen sind auch kein "gleich" sondern "größer als". Rundungsfehler oder ähnliches sollten hier also kein Problem sein. Alles was ich im Netz bisher finden konnte bringt mich nicht weiter. Es bleibt dabei, es werden keine Datensätze zurückgegeben.Warum macht LINQ to Entity hier solche Mucken und wie sieht ein Workround aus? Das Filtern nach Datumse ist doch eine mehr als übliche Anforderungen an Datenbank-Abfragen.
Gruß
MQ
PS.: Das Konstrukt funktioniert übrigens unter .NetCore. daraus habe ich es kopiert und war erstmal überrascht, dass es unter .NET Framework nicht geht.