EF核心:必须是可还原节点

时间:2018-12-19 16:40:57

标签: entity-framework .net-core entity-framework-core

我不确定为什么会收到错误消息:“必须是可还原节点”

这是我的查询。我正在使用EF Core 2.2运行Core 2(因此我应该拥有以前版本中的修复程序)

    IQueryable<Gizmo> gizmos = _context.Gizmo;


    IQueryable<GizmoViewModel> dataReferences = (
        gizmos.SelectMany(j => j.DataReferences.Select(r =>
            new GizmoViewModel()
            {
                GizmoId = j.Id,
                DataId = r.DataId
            }
        ))
    );

2 个答案:

答案 0 :(得分:3)

(不幸的是)您遇到了当前的EF Core查询翻译错误之一。

这似乎是由于访问内部SelectMany表达式内部的外部Select lambda参数引起的。

解决方法是使用另一个SelectMany重载,该重载具有第二个具有外部和内部参数的lambda(我猜这是C#编译器在转换LINQ查询语法时使用的):

IQueryable<GizmoViewModel> dataReferences = (
    gizmos.SelectMany(j => j.DataReferences, (j, r) =>
        new GizmoViewModel()
        {
            GizmoId = j.Id,
            DataId = r.DataId
        }
    )
);

答案 1 :(得分:0)

尝试包括DataReferences吗?

您的代码已修改:

IQueryable<GizmoViewModel> dataReferences = (
        gizmos.SelectMany(j => j.DataReferences.Select(r =>
            new GizmoViewModel()
            {
                GizmoId = j.Id,
                DataId = r.DataId
            }
        ))
.Include(m => m.DataReferences)