2010-09-16 2 views
1

Laissez-moi vous expliquer en utilisant cet exemple de code:Trouver un objet spécifique dans la liste dans l'objet dans une requête LINQ

var commands1 = new List<int> { 1 }; 
var lessons = new List<lesson> 
{ 
    new lesson 
    { 
     hours = new List<hour> 
     { 
     new hour { period = 1 } 
     } 
    } 
}; 
List<command> commands2 
{ 
    get 
    { 
     return (
     from o in commands1 
     select new command 
     { 
      hour = ????; 
     } 
    ).ToList(); 
    } 
} 

et à la place du ????. Je dois obtenir l'objet hour dont period correspond à o. Normalement je bouclerais par lessons, puis bouclerais par hours pour vérifier hour.period mais je ne sais pas comment faire cela dans une requête LINQ.

J'espère que c'est assez clair (et que j'ai paraphrasé le code correctement).

+0

J'ai traduit vos identifiants en néerlandais en utilisant Google Translate. J'espère que j'ai bien compris. – dtb

+0

Merci. J'ai beaucoup simplifié le code, je reçois à la fois des leçons et des commandes1 à partir de XML. –

Répondre

3
hour = lessons.SelectMany(l => l.hours).Where(h => h.period == o); 
+1

Peut-être 'Single' au lieu de' Where'? – dtb

+3

Notez que cela ne fournit pas l'objet spécifique, mais plutôt un 'IEnumerable ' d'objets qui répondent aux critères donnés. Si exactement un objet est attendu, utilisez '.Single()'. Si plusieurs peuvent exister et que vous n'en voulez qu'une, utilisez '.First()'. Si la possibilité n'existe pas et que c'est OK, utilisez 'SingleOrDefault()' (pour 0 à 1) ou 'FirstOrDefault()' (pour 0 à plusieurs possibilités). –

+0

Merci à vous tous! J'ai utilisé votre suggestion mais avec Single() et maintenant cela fonctionne. Il devrait toujours y avoir un objet, et sinon je vais lancer une erreur. –

Questions connexes