Em C#, digamos que eu tenho uma classe chamada Note com três variáveis de membros String.
public class Note
{
public string Title;
public string Author;
public string Text;
}
E eu tenho uma lista do tipo Nota:
List<Note> Notes = new List<Note>();
Qual seria a forma mais limpa de obter uma lista de todos os valores distintos na coluna Autor?
Eu poderia iterar através da lista e adicionar todos os valores que são't duplicados a outra lista de cordas, mas isso parece sujo e ineficiente. Tenho um pressentimento que'é uma construção mágica do Linq que'vai fazer isso em uma linha, mas eu não consegui'não consegui encontrar nada.
Jon Skeet escreveu uma biblioteca chamada morelinq que tem um operador DistinctBy()
. Veja aqui para a implementação. Seu código seria parecido com
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Actualização: Após reler sua pergunta, Kirk tem a resposta correta se você'está apenas procurando por um conjunto distinto de Autores.
Adicionado amostra, vários campos em DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();