Filtra l'elenco dei linq in base al valore della proprietà
-
09-06-2019 - |
Domanda
Ho un List<int>
e un List<customObject>
.La classe customObject ha una proprietà ID.Come posso ottenere un List<customObject>
contenente solo gli oggetti in cui si trova la proprietà ID List<int>
utilizzando LINQ?
Modificare:Ho accettato la risposta di Konrad perché è più facile/intuitiva da leggere.
Soluzione
var result = from o in objList where intList.Contains(o.ID) select o
Altri suggerimenti
using System.Linq;
objList.Where(x => intList.Contains(x.id));
Ho avuto un problema simile proprio ora e ho utilizzato la soluzione seguente.Se hai già l'elenco degli oggetti puoi rimuovere tutti quelli non trovati nell'elenco int, lasciando solo le corrispondenze in objList.
objList.RemoveAll(x => !intList.Contains(x.id));
Non testato, ma sarà qualcosa del genere:
var matches = from o in objList
join i in intList on o.ID equals i
select o;
@Konrad l'ha appena testato e funziona: ho appena fatto un errore di battitura in cui avevo scritto "i.ID" anziché "i".
Solo per completezza (e forse è più facile da leggere?), usando un "dove" simile al "join" di Matt:
var matches = from o in customObjectList
from i in intList
where o.ID == i
select o;
Tieni presente che l'utilizzo di join invece di contiene NON funziona quando il conteggio degli elementi nell'elenco supera 49!Otterrai l'errore: Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.