Как отфильтровать связанные записи о детях - PullRequest
2 голосов
/ 14 апреля 2011

Я пользуюсь услугами RIA. Мне нужно выбрать родительский объект (UnitOccupier), который имеет несколько связанных дочерних объектов (UnitOccupierDetails). Мне нужно отфильтровать дочерние объекты, чтобы вернуть одну запись. Как мне это сделать?

var q = from uo in _unitOccupierContext.GetUnitOccupierQuery()
        where uo.UnitOccupierDetails.????
                                     ---> I cant get to the child properties here

Спасибо

1 Ответ

3 голосов
/ 14 апреля 2011

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

var q = (from uo in _unitOccupierContext.GetUnitOccupierQuery() 
         select new {
             Parent = uo,
             Childs = uo.UnitOccupierDetails
                        .Where(uod => uod.MyDetailsProp == MyDetailsValue)
         }).FirstOrDefault();

if (q != null)
{
    UnitOccupier selectedUnitOccupier = q.Parent;
    selectedUnitOccupier.UnitOccupierDetails = q.Childs.ToList();
    // selectedUnitOccupier now only contains the filtered childs
}

Редактировать

Если вы хотите запросить детей и указать их родителей (связанных с вопросом в комментарии), вы можете использовать:

var q = _unitOccupierContext.GetUnitOccupierQuery()
         .SelectMany(uo => uo.UnitOccupierDetails
                             .Where(uod => uod.MyDetailsProp == MyDetailsValue))
         .Include(uod => uod.UnitOccupier)
         .FirstOrDefault(); // or .ToList() if you expect more than one record
// q is now null or a single UnitOccupierDetails entity
// with a reference to its parent

Я предполагаю, что ваш класс UnitOccupierDetails имеет свойство навигации к родителю UnitOccupier.

...