2011-04-14 5 views
2

J'utilise les services RIA. J'ai besoin de sélectionner une entité parente (UnitOccupier) qui a un certain nombre d'entités enfants liées (UnitOccupierDetails). J'ai besoin de filtrer les entités enfants pour retourner un seul enregistrement. Comment puis-je faire cela?Comment filtrer les enregistrements enfants associés

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

Merci

Répondre

3

Vous ne pouvez pas inclure une collection enfant filtrée du parent sélectionné. Vous ne pouvez inclure que la collection complète ou aucune collection enfant. Mais comme une solution de contournement, vous pouvez utiliser un type anonyme intermédiaire, comme ceci:

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 
} 

Modifier

Si vous souhaitez interroger les Childs et inclure leurs parents (liés à la question dans le commentaire), vous pouvez utiliser:

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 

Je suppose ici que votre classe UnitOccupierDetails possède une propriété de navigation au parent UnitOccupier.

+0

Puis-je interroger l'enfant et inclure le parent? – Greg

+0

@greg: voir modifier dans ma réponse. – Slauma

+0

Merci pour la mise à jour - J'ai essayé d'interroger l'entité OwnerOccupierDetails et de la filtrer à l'entité dont j'ai besoin. Cela fonctionne bien jusqu'à ce que vous arriviez à enregistrer l'entité, car il a besoin de son parent et provoquer des erreurs référentielles dans la base de données. Je vais réessayer avec le code ci-dessus ... – Greg

Questions connexes