我不知道如何为带有时区列的 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 启用遗留行为。