Encontre a interseção de duas listas no linq?

Eu tenho uma lista de int A, B. Eu gosto de fazer o seguinte passo no linq

list c = new List(); for (int i = 0; i < a.count; i++) { for (int j = 0; j < b.count; j++) { if (a[i] == b[j]) { c.add(a[i]); } } } 

Se its aeb object , eu preciso verificar propriedades particulares como esta maneira e adicionar lista se é igual a como posso fazer isso no linq?

Você poderia usar o método Intersect :

 var c = a.Intersect(b); 

Isso retorna todos os valores em a e b. No entanto, a posição do item na lista não é levada em consideração.

Você pode usar o Intersect :

 var a = new List(); var b = new List(); var c = a.Intersect(b); 

O equivalente LINQ do seu código é:

 var c = from i in Enumerable.Range(0, a.Count) from j in Enumerable.Range(0, b.Count) where a[i] == b[j] select a[i]; var cList = c.ToList(); 

Mas é muito melhor fazer:

 var c = from aItem in a join bItem in b on aItem equals bItem select aItem; var cList = c.ToList(); 

Mas isso não filtra duplicatas. Para filtrar duplicatas completamente , você pode fazer:

 var cList = a.Intersect(b).ToList(); 

Se você quiser que as duplicatas apareçam quantas vezes forem em b , por exemplo:

 var aSet = new HashSet(a); var cList = b.Where(aSet.Contains) .ToList(); 

Produza uma lista c contendo todos os elementos que estão presentes nas duas listas a e b :

 List c = a.Intersect(b).ToList(); 

Como Chris menciona em seu comentário sobre a pergunta original, o código de amostra fornecido retornará duplicatas na lista c (veja seu comentário para detalhes). O Intersect retornará apenas valores distintos. Para duplicar o comportamento do código de exemplo original, tente isto:

 var c = (from value in a where b.Contains(a) select a);