una recorrer obtener objeto mostrar listas lista leer elementos datos con c# linq list distinct

c# - recorrer - Obtenga una lista de valores distintos en List



recorrer una lista c# (5)

En C #, digamos que tengo una clase llamada Note con tres variables de 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 repetir la lista y agregar todos los valores que no son duplicados a otra lista de cadenas, pero esto parece sucio e ineficiente. Tengo la sensación de que hay una construcción mágica de Linq que hará esto en una línea, pero no he podido encontrar nada.


Jon Skeet ha escrito una biblioteca llamada morelinq que tiene un operador DistinctBy() . Vea here para la implementación. Tu código se vería como

IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);

Actualización: después de volver a leer su pregunta, Kirk tiene la respuesta correcta si solo busca un conjunto distinto de Autores.

Muestra adicional, varios campos en DistinctBy:

res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();


public class KeyNote { public long KeyNoteId { get; set; } public long CourseId { get; set; } public string CourseName { get; set; } public string Note { get; set; } public DateTime CreatedDate { get; set; } } public List<KeyNote> KeyNotes { get; set; } public List<RefCourse> GetCourses { get; set; } List<RefCourse> courses = KeyNotes.Select(x => new RefCourse { CourseId = x.CourseId, Name = x.CourseName }).Distinct().ToList();

Al usar la lógica anterior, podemos cursos únicos.


Notes.Select(x => x.Author).Distinct();

Esto devolverá una secuencia ( IEnumerable<string> ) de valores de Author , uno por valor único.


mcilist = (from mci in mcilist select mci).Distinct().ToList();


var DistinctItems = employees.GroupBy(x => x.EmpID).Select(y => y.First()); foreach(var item in DistinctItems) { //Add to other List }