这是预期行为吗?如果是,是否有任何解决方法?我正在使用Net Core 5.0和npgsql 5.0。
public async Task<List<long>> GetGuiaIdsWithFilters(DateTime createddate)
{
IQueryable<Guia> guiaToReturn = _context.Guia;
createddate = createddate.ToUniversalTime();
return await guiaToReturn.Where(g => g.StatusHistory.Any(s.Fecha.Date == createddate.Date)).Select(x => x.Id).ToListAsync();
}
运行此查询将返回以下错误,我将其归因于提供程序无法提取日期部分:s.Fecha.Date(DateTimeOffset.Date)。我阅读了文档,并且发现DateTimeOffset在PostgreSQL中将存储为timestamptz,但我没有找到任何关于常用函数(如获取日期部分)的限制。
我可以使用以下解决方法,它可以正常工作,但似乎是一种更低效的查询方式:LINQ表达式[...]无法被翻译。请重新编写查询以便能够进行翻译。
public async Task<List<long>> GetGuiaIdsWithFilters(DateTime createddate)
{
IQueryable<Guia> guiaToReturn = _context.Guia;
var FromDate = createddate.ToUniversalTime().AddDays(-1);
var ToDate = createddate.ToUniversalTime.AddDays(1);
return await guiaToReturn.Where(g => g.StatusHistory.Any(s => s.Fecha > FromDate && s.Fecha < ToDate)).Select(x => x.Id).ToListAsync();
}