Pergunta

eu tenho um List<int> e um List<customObject>.A classe customObject possui uma propriedade ID.Como posso conseguir um List<customObject> contendo apenas os objetos onde a propriedade ID está no List<int> usando LINQ?

Editar:Aceitei a resposta de Konrads porque é mais fácil/mais intuitivo de ler.

Foi útil?

Solução

var result = from o in objList where intList.Contains(o.ID) select o

Outras dicas

using System.Linq;

objList.Where(x => intList.Contains(x.id));

Eu tive um problema semelhante agora e usei a solução abaixo.Se você já possui a lista de objetos você pode remover todos os não encontrados na lista int, deixando apenas as correspondências em objList.

objList.RemoveAll(x => !intList.Contains(x.id));

Não testado, mas será algo assim:

var matches = from o in objList 
                  join i in intList on o.ID equals i
                  select o;

@Konrad acabou de testar e funciona - acabei de cometer um erro de digitação ao escrever "i.ID" em vez de "i".

Apenas para completar (e talvez seja mais fácil de ler?), usando um "where" semelhante ao "join" de Matt:

var matches = from o in customObjectList
              from i in intList
              where o.ID == i
              select o;

Observe que usar join em vez de contains NÃO funciona quando a contagem de itens na lista excede 49!Você receberá o erro: Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top