J’utilise Npgsql 3.0.3.0 et la dernière version de PetaPoco.
Quand j’exécute cette commande:
var dateCreated = DateTime.Now; // just an example var sql = new Sql("WHERE date_created = @0", dateCreated.ToSsortingng("yyyy-MM-dd HH:00:00")); var category = db.SingleOrDefault(sql);
Je reçois l’erreur suivante:
Npgsql.NpgsqlException 42883: l’opérateur n’existe pas: horodatage sans fuseau horaire = texte
- Comment définir le code à distance basé sur la version du framework .NET?
- Simple get avec NHibernate (en utilisant la cartographie par code) est extrêmement lent
- LINQ Aggregate avec sous-agrégats
- Boîte de dialog Enregistrer le fichier, restreindre le nom
- Comment implémenter un stream de nombres aléatoires sur une application asp.net à trafic élevé avec plusieurs serveurs
Je comprends que le message d’erreur indique que j’essaie de comparer un horodatage (date) avec un texte, mais pour moi, il est parfaitement valide de les comparer, car j’attends que l’instruction SQL suivante soit construite:
SELECT * FROM category WHERE date_created = '2017-02-03 15:00:00'
Je ne souhaite pas vraiment transtyper ma colonne de firebase database en texte pour des raisons de performances.
Vous devez atsortingbuer une valeur à timestamp:
var sql = new Sql("WHERE date_created = @0::timestamp", dateCreated.ToSsortingng("yyyy-MM-dd HH:00:00"));
Comme @ roman-tkachuk a répondu, vous pouvez dire à PostgreSQL de convertir votre chaîne en horodatage.
Ou mieux encore, vous pouvez simplement envoyer un horodatage directement à PostgreSQL, plutôt que d’envoyer une représentation sous forme de chaîne d’un horodatage et de le lancer. Pour ce faire, envoyez simplement dateCreated
directement, sans ToSsortingng()
.