2012-01-30 10 views
6

Ho un elenco principale di oggetti complessi.Linq Seleziona sottoinsieme dell'elenco principale

Ho una lista di int id che ho bisogno di selezionare l'oggetto complesso corrispondente dall'elenco principale.

questo non funziona

MasterListofComplexObj.Where(u => MasterListofComplexObj.Select(i => i.Id).Contains(ChildListofIntIds)); 

qualsiasi aiuto sarebbe apprezzato.

+0

Hai ricevuto un errore? O risultati sbagliati? Potresti fornire alcuni valori di input e l'output che ti aspetti? –

risposta

20

questo dovrebbe funzionare:

var results = MasterListofComplexObj.Where(u => ChildListofIntIds.Contains(u.Id)); 
+0

sei in .... grazie per l'aiuto. nella mia mente la logica è un po 'invertita, tu prendi la lista dei bambini e vedi se contiene l'id che stai selezionando dalla lista degli alberi. grazie ancora – jim

+0

sì, la sintassi non è quello che ci si aspetterebbe intuitivamente - ma dal momento che si sta osservando ogni 'ComplexObj' uno per uno ha senso – BrokenGlass

1
var results = from obj in MasterListofComplexObj 
    where ChildListofIntIds.Contains(obj.Id) 
    select obj; 

Questo è un IEnumerable. Si consiglia di .FirstOrDefault() per ottenere un oggetto.

traduce in MasterListofComplexObj.Where (item => ChildListofIntIds.Contains (item.Id))

No selezionare necessaria se si desidera che l'oggetto stesso e non una delle sue proprietà.

1

L'altra cosa più generale di esaminare sarebbe registrazione:

var results = MasterList.Join(ChildList, (m => m.Id), (c => c), ((m,c) => m)); 

credo, ma non può eseguire il backup con citazione o dati sperimentali, che si uniscono sarebbe più veloce del Dove -> Contiene pezzo .

Problemi correlati