EF Core: должен быть приводимым узлом - PullRequest
0 голосов
/ 19 декабря 2018

Я не уверен, почему я получаю ошибку: «Должен быть приводимый узел»

Это мой запрос.Я использую Core 2 с EF Core 2.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 голосов
/ 19 декабря 2018

Просто (и, к сожалению) вы попали в одну из текущих ошибок перевода запросов EF Core.

Похоже, это вызвано доступом к внешнему параметру SelectMany lambda внутри внутреннего выражения Select.

Обходной путь - использовать другую перегрузку SelectMany, имеющую вторую лямбду с обоимивнешние и внутренние параметры (которые, я думаю, используются компилятором C # при преобразовании синтаксиса запроса LINQ):

IQueryable<GizmoViewModel> dataReferences = (
    gizmos.SelectMany(j => j.DataReferences, (j, r) =>
        new GizmoViewModel()
        {
            GizmoId = j.Id,
            DataId = r.DataId
        }
    )
);
0 голосов
/ 19 декабря 2018

Попробуйте включить DataReferences, может быть?

Ваш код исправлен:

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