2016-05-18 9 views
2

Ich habe folgendes dynamisches Objekt als IEnumerable vom Typ dynamischenC# dynamische zugreifenden Kind als IEnumerable

[{ 
    "id": 1, 
    "subList": [ 
     {"specialId": 42}, 
     {"specialId": 27} 
    ] 
}, 
{ 
    "id": 2, 
    "subList": [ 
     {"specialId": 13}, 
     {"specialId": 14} 
    ] 
}] 

ich die Objekte in eine IEnumerable von Dynamics bekommen kann und LINQ-Abfragen wie die folgenden

listOfDynamics.Where(x => x.id == 2); 
laufe

was jedoch würde ich in der Lage zu tun ist zu tun, ist Spiel auf dem subList

listOfDynamics.Where(x => ((IEnumerable)x.subList)).Where(y => y.specialId == 42)); 

so in dem obigen Beispiel würde das Objekt mit der ID von 1 zurück, aber nicht die ID von 2

Antwort

4

In Ihrem Where Sie wollen prüfen, ob die subList jedes Element mit specialId == 42 enthält:

listOfDynamics.Where(x => ((IEnumerable<dynamic>)x.subList).Any(y => y.specialId == 42)); 

So Any() ist die Methode, die Sie wollen.

Und Sie müssen x.subList zu IEnumerable<dynamic> statt nur IEnumerable (wie von @ Ivan-Stoev und @Derked in den Kommentaren vorgeschlagen) zu übertragen.

+0

Während im Allgemeinen ist dies eine richtige Antwort, die es jetzt nicht einmal kompiliert. –

+0

@IvanStoev Sie haben Recht, ich habe nur die ursprüngliche Zeile kopiert. Ich muss zugeben, dass mir die Dynamik nicht so vertraut ist, also bin ich mir nicht sicher, wie ich diese SubList richtig auf die IEnumerable umsetzen kann oder ob das überhaupt nötig ist. –

+0

'IEnumerable ' sollte ausreichen :) –