2017-05-10 1 views
3

Comment écrire cette requête? :Renvoyez ces enregistrements de certains parents dont la propriété de leurs enfants est égale à une certaine valeur?

var parents = parents.Select(o => o.children.Where(p=>p.property1 == "Something")).ToList(); 

Cela provoque l'erreur de type de conversion. Comment puis-je retourner certains parents en fonction d'une condition qui est vraie pour les propriétés de leurs enfants?

+2

'select' est pour sélectionner des éléments. Vous voulez 'parents.Where'. Ensuite, vous voulez un parent où * un * de ses enfants correspondent. Ainsi, il devient 'parents.Where (... children.Any (...))' – Rob

+0

pourquoi ne pas écrire le code complet, comme 'var/ou un type = parents.Sélectionnez ...' et corrigez également les 'manquants') 'Où voulez-vous le mettre? – Anil

+0

@Anil Merci. J'ai édité le code. –

Répondre

2

C'est ce que votre requête pourrait être:

parents = parents.Where(p => p.children.Any(c => c.property1 == "Something")).ToList(); 

Enumerable.Wherefiltres une séquence de valeurs basée sur un prédicat alors Enumerable.Selectprojets chaque élément d'une séquence dans une nouvelle forme.

Enumerable.Any reviendriez vrai s'il y a au moins 1 enfant porperty1 égal à « quelque chose »

Comme tout ce que vous devez faire ici est le filtrage, il vous suffit d'utiliser Where. Vous auriez utilisé Select si vous vouliez créer une collection d'un type autre que celui du parent lui-même.

+0

{} Voici ce que j'obtiendrais. J'ai une relation de un à zéro/plusieurs et les valeurs de propriété peuvent également être nulles pour les enfants. P.children pourrait aussi avoir des valeurs nulles puisque la relation est une à zéro/plusieurs comme je l'ai dit. Est-ce correct? @sachin –

+0

Ensuite, vous devez également ajouter une vérification null. 'parents = parents.Where (p => p.children! = null && p.children.Any (c => c.property1 ==" Quelque chose ")). ToList();' – sachin

0

Essayez code

var parents= (from p in parents.AsEnumerable() 
    where p.children!=null && p.children.property1 =="Something" 
    select p).ToList()