C# DateTime 和带时区的 PgSql Timestamp 的 Npgsql Linq“where”查询问题

问题描述 投票:0回答:0

我不知道如何为带有时区列的 PostgreSql 时间戳创建正确的 linq“where”查询。 在数据库模型中,我已将其映射到 DateTime。 我正在使用 Npgsql.EntityFrameworkCore.PostgreSQL 7.0.3。 我使用从 dbset 返回过滤数据的函数:

 protected IQueryable<T> ResultFiltered<T>(IQueryable<T> data, Query query)
        {
            var temp = data;

            if (!string.IsNullOrEmpty(query.Filter))
            {
                temp = temp.Where(query.Filter);
            }

            return temp;
        }

它适用于“Id = 12 AND Amount > 0”等查询。 我从/向数据库获取/插入数据没有问题。

我得到的错误是

'timestamp with time zone' literal cannot be generated for Local DateTime: a UTC DateTime is required
我试过
$"DateField >= \"{MyQyeryDate}"\"
$"DateField >= DateTime(\"{MyQyeryDate}"\)"
$"DateField >= DateTime(\"{MyQyeryDate.ToString()}"\)"
。 我尝试将 DateTime.Kind 设置为 UTC,但这些组合都不适合我。 我还尝试将它转换为我的 PostgreSql 客户端在表视图中显示的字符串表示形式,就像这样
MyQueryDate.ToString("yyyy-MM-dd HH:mm:ss.ffffffzzz")
然后将其用于查询但没有运气。 这可能是我忽略的事情,可以很容易地完成,但我仍然无法让它工作,也没有找到答案。 在 Npgsql.EntityFrameworkCore.PostgreSQL 6.0.0 之前的版本中,像
$"DateField >= DateTime(\"{MyQyeryDate.ToString()}"\)"
这样的查询工作正常。我不想为 npgsql 启用遗留行为。

c# postgresql entity-framework-core .net-6.0 npgsql
© www.soinside.com 2019 - 2024. All rights reserved.