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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top