gpt4 book ai didi

c# - EF Core 3.1 中的时间跨度问题

转载 作者:行者123 更新时间:2023-12-04 01:36:05 27 4
gpt4 key购买 nike

我在使用 EF Core 3.1 查询 PostgreSQL 数据库时遇到问题。

查询非常简单

var gamesQuery = this.dbContext.Games.Where(game => game.StartTime > DateTime.Now).AsQueryable();

// 'request.TimeFrom' is of type System.TimeSpan and the value is populated
gamesQuery = gamesQuery.Where(game => game.StartTime.TimeOfDay >= request.TimeFrom);

// .ToList()-int here causes the exception.
var games = gamesQuery.ToList();

异常消息明确指出无法翻译查询:

"无法翻译 LINQ 表达式 'DbSet\r\n .Where(g => g.StartTime > DateTime.Now)\r\n .Where(g => g.StartTime.TimeOfDay >= __request_TimeFrom_0)'。要么以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关更多信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038。”

问题是相同的查询在 .NET Core 2.2 中工作正常。
我还没有发现任何关于这个问题的信息。

有人知道这是什么原因还是我错过了什么?

最佳答案

目前 PostgreSQL EF Core 3.x 查询提供程序不支持翻译 DateTime.TimeOfDay - 见 TODO评论在 source code .

很可能它通过静默使用客户端评估在 2.x 中“工作”。但隐含的客户评价has been removed in 3.0并且无法将其重新打开。

您可以尝试以下等效结构:

.Where(game => (game.StartTime - game.StartTime.Date) >= request.TimeFrom)

至少它不会产生上述异常。

如果它不起作用,请采纳他们的建议并通过插入 AsEnumerable() 明确切换到客户评估。在不可翻译的表达式之前的适当位置。

关于c# - EF Core 3.1 中的时间跨度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59520997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com