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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top