Entity Framework Включить постоянство при следующем запросе - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь выполнить запрос с условным включением. Я видел несколько вариантов, один из которых был с проекцией. Мне также нужно, чтобы я мог получить доступ к свойствам из отфильтрованного списка.

Связь между сущностями:

(Parent) 1-n (List of children) 1-1 (Grand Child)

Я попробовал вариант с проекцией с проекцией, и он сработал, но не смог для доступа к свойству из отфильтрованного списка. Я потерял много времени, пытаясь заставить это работать, и, используя метод «попробуй и провал», мне это удается, но я замечаю то, чего не понимаю, и это меня очень беспокоит. Вот мой код:

    public IQueryable<Parent> Parents()
    {
        GrandChildId = ....;

        _contextProvider.Context.Parents.Where(c => "condition").Include(b =>
            b.ChildrenList.Select(f => f.GrandChild)).ToList();    //PART 1------------------

        var parentsList = _contextProvider.Context.Parents.Where(condition).Select(parents => new
                                                                        {
                                                                            Parents = parents,
                                                                            ChildrenList = parents.ChildrenList.Where(b => b.GrandChild.Id == GrandChildId),
                                                                        }
            ).ToList().Select(row =>
                {
                    var item = row.Parents;
                    item.ChildrenList = (ICollection<ChildrenList>)row.ChildrenList;
                    
                    return item;
                }
            ); //PART 2--------------------

        return parentsList.AsQueryable();
    }

Если вы спросите меня, я считаю «Часть 1» неуместной, но если я удалю ее и попытаюсь добавить в «Часть 2», она больше не работает (Grand Child больше не доступен). Кажется, что включение из первой части сохраняется во втором запросе.

Все свойства навигации «виртуальные».

...