首页 > 解决方案 > 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”并将其更改为不访问此类型的子项。

我无法弄清楚为什么这个简单的查询会失败,或者异常消息试图告诉我什么。我很高兴有任何帮助!

谢谢

标签: c#entity-framework-coreef-core-3.1

解决方案


虽然建议的错误报告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 ......


推荐阅读