Passando tstzrange para postgres no EF Core usando
DateTime algus = DateTime.Parse("2024-11-25T00:00:00+02:00", CultureInfo.InvariantCulture).ToUniversalTime();
DateTime lopp = DateTime.Parse("2025-01-25T22:00:00+02:00", CultureInfo.InvariantCulture).ToUniversalTime();
await ctx.Database.SqlQuery<DateTime>($@"
select lower(tstzrange '[{algus},{lopp})') as ""Value""
").ToArrayAsync();
gera erro
invalid input syntax for type timestamp with time zone: "@p0" at character 20
STATEMENT: select tstzrange '[@p0,@p1)'
Como passar tstzrange para o Postgres?
O código está no controlador ASP.NET 9 MVC
O aplicativo usa o servidor Postgres 12 e posterior e o mais recente Npgsql Entity Framework Core Provider
Como
PostgreSQL
doc,tstzrange
é um tipo de intervalo integrado https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-BUILTINPara
Npgsql
, o tipo de intervalo é mapeado,NpgsqlRange<TElement>
pois nenhuma classe C# comum pode conter seu valor. https://www.npgsql.org/doc/types/basic.htmlA seguir está um exemplo para analisar e selecionar
tstzrange
: