Filtrer la liste Linq sur la valeur de la propriété
-
09-06-2019 - |
Question
j'ai un List<int>
et un List<customObject>
.La classe customObject possède une propriété ID.Comment puis-je obtenir un List<customObject>
contenant uniquement les objets où se trouve la propriété ID dans le List<int>
vous utilisez LINQ ?
Modifier:J'ai accepté la réponse de Konrad car elle est plus facile/plus intuitive à lire.
La solution
var result = from o in objList where intList.Contains(o.ID) select o
Autres conseils
using System.Linq;
objList.Where(x => intList.Contains(x.id));
J'ai eu un problème similaire tout à l'heure et j'ai utilisé la solution ci-dessous.Si vous disposez déjà de la liste des objets, vous pouvez supprimer tous ceux qui ne sont pas trouvés dans la liste int, en ne laissant que les correspondances dans objList.
objList.RemoveAll(x => !intList.Contains(x.id));
Non testé, mais ça ressemblera à ceci :
var matches = from o in objList
join i in intList on o.ID equals i
select o;
@Konrad vient de le tester, et ça marche - j'ai juste eu une faute de frappe où j'avais écrit "i.ID" plutôt que "i".
Juste pour être complet (et peut-être que c'est plus facile à lire ?), en utilisant un "where" similaire au "join" de Matt :
var matches = from o in customObjectList
from i in intList
where o.ID == i
select o;
Veuillez noter que l'utilisation de la jointure au lieu de contain NE fonctionne PAS lorsque le nombre d'éléments dans la liste dépasse 49 !Vous obtiendrez l'erreur : Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.