Как получить childs потомка родительского Entity Framework - PullRequest
0 голосов
/ 17 марта 2019

У меня есть 3 таблицы

Inventarios -> Localizacoes -> Etiquetas

все имеют отношение один ко многим слева направо

Проблема в том, что я не могу достичь Этикет

// GET: api/Inventarios
public IQueryable<Inventario> GetInventarios()
{
    var inventarios = db.Inventarios.Include(i => i.Localizacoes.Select(l => 
                                                 l.Etiquetas.SelectMany(e => e.Numero)));
    return inventarios;
}

а вот модели

public class Inventario
{
    public int InventarioID { get; set; }
    public string Colaborador { get; set; }
    public string Armazem { get; set; }
    public decimal Total { get; set; }
    public DateTime Data { get; set; }

    public ICollection<Localizacao> Localizacoes { get; set; }
}

public class Localizacao
{
    public int LocalizacaoID { get; set; }
    public string Referencia { get; set; }
    public int EtiquetasPorInventariar { get; set; }
    public int EtiquetasInventariadas { get; set; }
    public bool IsValid { get; set; }
    public decimal Precisao { get; set; }

    public int InventarioID { get; set; }
    public Inventario Inventario { get; set; }

    public ICollection<Etiqueta> Etiquetas{ get; set; }
}

public class Etiqueta
{
    public int EtiquetaID { get; set; }
    public string Numero { get; set; }

    public int LocalizacaoID { get; set; }
    public Localizacao Localizacao { get; set; }
}

это исключение, которое я получаю на консоли браузера из запроса API

"Выражение« Включить путь »должно относиться к свойству навигации, определенному для типа. Используйте пунктирные пути для ссылочных навигационных свойств и оператор Select для коллекционных навигационных свойств. "

1 Ответ

1 голос
/ 17 марта 2019

Я предполагаю, что вы используете IQueryable для OData поддержка

Помимо этого, есть 2 вещи, которые я вижу здесь, которые выглядят не совсем правильно

Во-первых, это SelectMany, вероятно, оно должно быть Select

var inventarios = db.Inventarios.Include(i => i.Localizacoes.Select(l => 
                                             l.Etiquetas.Select(e => e.Numero)));

Во-вторых, вы возвращаете IQueryable, я не совсем уверен, что это будет проходить по графу объектов.

В качестве теста вы можете сделать что-то вроде этого

return inventarios.ToList().AsQuerable(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...