以下查询在 EF Core 7 中运行良好:
string[] values = new[] {"one", "two", "three", "four"};
var query = (from item in _context.items
let value = values[item.value]
select new {item.id, value}).ToList();
但是升级到 EF Core 8 后,抛出以下异常:
System.InvalidOperationException:SQL 树中的表达式 '' 未分配类型映射。
我检查了重大更改文档,我正在运行 SQL Server 2022,并将数据库的兼容性级别设置为
160
。
我在这里缺少什么?
我在这里缺少什么?
嗯,看起来像是回归。 EF Core 8 不应将此投影作为 SQL 处理,但它确实如此。
检测哪些内容应在客户端处理以及哪些内容可翻译是脆弱的算法,因此最好帮助 EF Core 正确完成:
string[] values = new[] {"one", "two", "three", "four"};
var query = (from item in _context.items
.Select(x => new { x.Id, x.value }).ToList() // select only needed fields
let value = values[item.value]
select new {item.id, value}).ToList();
但是在 EF Core 存储库中创建有关该问题的问题,以便他们可以创建回归测试并修复此回归。
您还可以尝试通过删除
let
操作符来简化查询,这是额外的 Select
var query = (from item in _context.items
select new {item.id, value = values[item.value]}).ToList();