Ответ 1
Notes.Select(x => x.Author).Distinct();
Это вернет последовательность (IEnumerable<string>
) значений Author
- по одному на уникальное значение.
В С#, скажем, у меня есть класс под названием Note с тремя переменными-членами String.
public class Note
{
public string Title;
public string Author;
public string Text;
}
И у меня есть список типов Примечание:
List<Note> Notes = new List<Note>();
Каким будет самый чистый способ получить список всех различных значений в столбце Author?
Я мог выполнять итерацию по списку и добавлять все значения, которые не дублируются в другой список строк, но это кажется грязным и неэффективным. У меня есть ощущение какой-то магической конструкции Linq, которая сделает это в одной строке, но я ничего не смог придумать.
Notes.Select(x => x.Author).Distinct();
Это вернет последовательность (IEnumerable<string>
) значений Author
- по одному на уникальное значение.
var DistinctItems = employees.GroupBy(x => x.EmpID).Select(y => y.First());
foreach(var item in DistinctItems)
{
//Add to other List
}
Джон Скит написал библиотеку под названием morelinq, которая имеет оператор DistinctBy()
. См. здесь для реализации. Ваш код будет выглядеть как
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Update: После повторного чтения вашего вопроса у Кирка есть правильный ответ, если вы просто ищете отдельный набор авторов.
Добавлен образец, несколько полей в 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();
Используя вышеприведенную логику, мы можем использовать уникальные курсы.
mcilist = (from mci in mcilist select mci).Distinct().ToList();