Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как вернуть много дочерних коллекций Count () в запросе фреймворка с одной сущностью

Автор вопроса: JamesОтветов: 1

У меня есть две сущности, родительская и дочерняя в Entity Framework.

У родителя есть набор дочерних сущностей.

В моем запросе я хочу вернуть только родительские сущности (полностью типизированные типы EF), а также Count () дочерних сущностей (для этого можно задать свойство в родительском элементе), но я хочу сделать это только в один вызов базы данных, без написания пользовательского S-Proc. Это возможно?

Важно, я хочу превратить это в один запрос:

EFContext content = new EFContext();
IQueryable<Parent> parentQuery = context.Parent.Select();
foreach(Parent parent in parentQuery)
{
  parent.NoChildItems = parent.Childs.Count();
}

Когда я активирую перечислитель для этого, он вызывает базу данных для списка и снова для каждого запроса Count (). Я возвращаю примерно 100 элементов каждый раз и поэтому предпочел бы не делать 100 отдельных вызовов только для количества дочерних элементов.

Спасибо за любую помощь.

entity-frameworklinq-to-entities

Ответы

Ответ 1 · рейтинг 11 · LukLed

Это должно работать:

IQueryable parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() });

ИЗМЕНИТЬ

Если вы определите:

public class ParentModel
{
    public Task Parent { get; set; }
    public int ChildCount { get; set; }
}

ты можешь использовать

IQueryable parentQuery = context.Parent.Select(p => new ParentModel { Parent = p, ChildCount = p.Childs.Count() });

ИЗМЕНИТЬ

Вы также можете:

var parentQuery = context.Parent.Select(p => new { Parent = p, ChildCount = p.Childs.Count() }).ToList();
parentQuery.ForEach(p => p.Parent.ChildCount = p.ChildCount);
var result = return parentQuery.Select(p => p.Parent);

Коротко, и у вас есть заселение.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы