Как вернуть множество дочерних коллекций Count () в одном запросе структуры сущностей - PullRequest
5 голосов
/ 10 января 2010

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

Родитель имеет коллекцию дочерних сущностей.

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

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

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

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

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

1 Ответ

9 голосов
/ 10 января 2010

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

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

EDIT

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

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() });

EDIT

Вы также можете сделать:

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);

Коротко и ваше имущество заполнено.

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