2012-06-25 4 views
0

Cela devrait être simple, mais je ne fais aucun progrès sur ce problème. Je veux écrire une déclaration LINQ qui renvoie une personne correspondant à un ID donné et inclure un ensemble de visites. Que je peux faire. Maintenant, je dois inclure uniquement les visites actives, c'est-à-dire inclure la visite uniquement si le drapeau IsActive est vrai. Ma requête est incluse ci-dessous. Qu'est-ce que je fais mal?Comment utiliser une condition .Where() avec .Include()?

var inmate = this.db.Inmates.Where(p => p.Id == id).Include(p => p.Visits.Where(v => v.IsActive)).FirstOrDefault(); 

Mise à jour # 1 - J'ai aussi essayé cette déclaration:

var inmate = this.db.Inmates.Include(p => p.Visits).Where(p => p.Id == id && p.Visits.Any(v => v.IsActive)).FirstOrDefault(); 
+0

Avez-vous vu cette question SO http://stackoverflow.com/questions/1680863/linq-include-with-where-clause? –

+1

Je crois que vous essayez de faire un chargement passionné conditionnel où lorsque vous accédez à inmateObject.Visits vous voulez seulement la liste des visites actives. Ceci est déjà discuté ici; http://stackoverflow.com/questions/3718400/conditional-eager-loading –

+0

@prashantht Je suis d'accord. Je ne pense vraiment pas qu'il y ait un moyen de faire autre que ce qu'ils suggèrent dans votre lien. –

Répondre

0

Essayez ceci:

var inmate = this.db.Inmates.Where(i => i.Visits.Any(x => x.IsActive)) 

Note: que le code suppose que le IEnumerable<Visits> est une propriété d'un objet Inmate .

Questions connexes