0

我尝试遵循有关通过动态映射访问 json DOM 的Npgsql 教程。本教程中建议使用JsonDocument然后.GetProperty(string)在其上使用,但似乎只能通过.RootElement(这是 a JsonElement,并且确实包含GetProperty方法)访问它。

无论哪种方式,我都会得到这个例外:

System.InvalidOperationException: The LINQ expression 'DbSet<GameEntity>
.Where(g => g.GameInfo.GetProperty("ReadableIdentifier").ToString() == __readableIdentifier_0)' 
could not be translated. 
Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly 
by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). 

我尝试了几个解决方案:

  1. 有效:添加AsEnumerable()到查询中,但这违背了目的,因为它获取所有数据而没有实际访问本机 JSON 数据
  2. 有效:改为改为 POCO - 但这极大地限制了我希望从 JSON 文档中获得的灵活性
  3. 不起作用:services.AddNewtonsoftJson(...)ConfigureServices(...)in 中删除Startup,因为控制器响应需要设置options.SerializerSettings.ReferenceLoopHandling
  4. 不起作用:取消引用 Newtonsoft.Json(我正在使用 Swagger,它似乎需要它)。

理想情况下,我希望看到下面的查询可以在本地工作并经过适当的翻译,而无需在执行操作之前下载所有记录:

var gameEntity = _context.Games
            .Include(x => x.Characters)
            //.AsEnumerable()
            .Where(x => x.GameInfo.GetProperty("ReadableIdentifier").ToString() == readableIdentifier)
            .FirstOrDefault();

有什么我想念的吗?

4

0 回答 0