Existe uma operação Linq para determinar se há itens em uma coleção que têm os mesmos valores para um par de propriedades?

StackOverflow https://stackoverflow.com/questions/1630277

Pergunta

C #: Eu tenho uma coleção de objetos. T tem 2 propriedades. Propriedade A e propriedade B. A regra que coleta isso precisa aderir é que a combinação de valores para A e B deve ser exclusivo dentro da coleção. Em outras palavras, A e B necessidade de servir como uma chave primária composta.

Existe uma operação em Linq eu posso usar para verificar essa condição? Eu esperava que fosse algo como

if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count())

A declaração acima é como eu iria verificar se há itens na coleção, que tem nomes duplicados, mas eu não sei como fazê-lo para mais de uma propriedade.

Foi útil?

Solução

Use um tipo anônimo para selecionar a chave composta, por exemplo.

int totalCount = items.Count();
int distinctCount = items.Select(x => new { x.Name, x.Other })
                         .Distinct()
                         .Count();

Tipos anônimos implementar automaticamente igualdade e hashcodes com base em suas propriedades (e o comparador de igualdade padrão para os tipos dessas propriedades).

Outras dicas

Basta selecionar em um novo, objeto anônimo

var keys = items.Select( x => new { x.Name, x.Other } ).ToList();

if (keys.Distinct().Count() != keys.Count())
{
 ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top