En C#, digamos que tengo una clase llamada Note con tres variables miembro String.
public class Note
{
public string Title;
public string Author;
public string Text;
}
Y tengo una lista de tipo Nota:
List<Note> Notes = new List<Note>();
¿Cuál sería la forma más limpia de obtener una lista de todos los valores distintos en la columna Autor?
Podría iterar por la lista y añadir todos los valores que no sean duplicados a otra lista de cadenas, pero esto parece sucio e ineficiente. Tengo la sensación de que hay alguna construcción mágica de Linq que hace esto en una línea, pero no he sido capaz de encontrar nada.
Jon Skeet ha escrito una biblioteca llamada morelinq que tiene un operador DistinctBy()
. Vea aquí para la implementación. Su código sería como
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Actualización: Después de releer tu pregunta, Kirk tiene la respuesta correcta si sólo buscas un conjunto distinto de Autores.
Añadido el ejemplo, varios campos en DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();