c# - ToDictionary 的 EF Core 异常
问题描述
我有一个简单的 EF Core 查询,它引发了一个异常,令我惊讶的是:
var test = await _context.GroupMessages
.Select(m => new MinimalChannelMessage()
{
id = m.Id,
er = m.Emojis.ToDictionary(e => e.Emoji, e => e.Users.Select(u => u.UserId))
})
.ToListAsync();
从查询中可以看出,这些表是GroupMessages -> Emojis -> N-to-M table with UserId
我得到的例外是:
从“VisitLambda”调用时,重写“System.Linq.Expressions.ParameterExpression”类型的节点必须返回相同类型的非空值。或者,覆盖“VisitLambda”并将其更改为不访问此类型的子项。
我无法弄清楚为什么这个简单的查询会失败,或者异常消息试图告诉我什么。我很高兴有任何帮助!
谢谢
解决方案
虽然建议的错误报告https://github.com/dotnet/efcore/issues/18440可能是相关的,但我很难在列出的那些中找到替代方案。我试过...
er = new Dictionary<string, string[]>(m.Emojis.AsEnumerable().Select(e => new KeyValuePair<string, string[]>(e.Emoji, e.Users.Select(u => u.UserId).ToArray())))
er = m.Emojis.AsEnumerable().ToDictionary(e => e.Emoji, e => e.Users.Select(u => u.UserId).ToArray())
这两个都不适合我。所以我最终不得不只包含整个树,然后在内存中执行 ToDictionary ......
推荐阅读
- visual-studio - oData 连接的服务发送补丁而不是预期的 Put 动词
- php - Laravel如何仅在内部数组之间验证不同的规则
- ios - 如何在 Swift 中扩展内部范围值
- php - 处理php数组
- google-anthos - 已解决 - Anthos on VMWare 部署跷跷板,健康检查错误 403 Forbidden
- html - 基于样式组件的 attr 样式
- php - Azure B2C 与 Laravel 社交名流
- node.js - 我可以使用一个到 postgresql 的连接并使用它来进行并发查询吗?
- mariadb-10.5 - 如何使用 mysqldump 导出超过 100 个表
- javascript - 无法使用 html2canvas 截图谷歌地图