2010-11-10 5 views
3

Note: Le code pseduo et faux-pensée-up sur place classes/propriétés ... pour protéger les innocentsComment faire le code Linq/Lambda suivant?

Je suis en train de récupérer l'instance Person, où la personne a un particulier name ... comme résultat IQueryable.

Vu le code ci-dessous ...

public class Person 
{ 
    public ICollection<PersonDetails> PersonDetails { get; set; } 
} 

public class PersonDetails 
{ 
    public string Name { get; set; } 
} 

comment puis-je récupérer un Person, qui a le nom de 'Fred'?

je tentais (qui a échoué) ....

public static IQueryable<Person> WithName(this IQueryable<Person> value, 
              string name) 
{ 
    return value.Where(x => x.PersonDetails.Where(y => y.Name == name)); 
} 

.. et qui ne compile pas.

Des indices, des piaulements?

+0

Comment at-il échoué? Avez-vous eu une erreur de compilation ici? –

+2

Ai-je oublié quelque chose ou pourquoi une personne a-t-elle plus d'un nom? – Timbo

+0

@Timbo: Je ne sais pas, mais je suppose que cela pourrait être une personne chinoise qui a à la fois un nom chinois et un nom anglais? –

Répondre

12

Essayez Any à la place du second Where:

public static IQueryable<Person> WithName(this IQueryable<Person> value, 
              string name) 
{ 
    return value.Where(x => x.PersonDetails.Any(y => y.Name == name)); 
} 
+0

Cheers. Je toujours confondre. J'ai d'abord essayé 'Any' et ensuite' Where' mais ça a échoué bien sûr ... alors ... bravo! travaux :) –

Questions connexes