获取列表中不同值的列表

在C#中,假设我有一个名为Note的类,它带有三个String成员variables。

public class Note { public string Title; public string Author; public string Text; } 

我有一个types的列表注意:

 List<Note> Notes = new List<Note>(); 

在“作者”列中获得所有不同值的列表的最干净的方法是什么?

我可以遍历列表并将所有不重复的值添加到另一个string列表中,但是这看起来很脏并且效率低下。 我有一种感觉,有一些神奇的Linqbuild筑可以做到这一点,但我一直没有能够拿出任何东西。

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

这将返回Author值的序列( IEnumerable<string> ) – 每个唯一值一个。

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

Jon Skeet写了一个叫做morelinq的库,它有一个DistinctBy()运算符。 看到这里的实施。 你的代码看起来像

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

更新:重新阅读你的问题后,柯克有正确的答案,如果你只是寻找一组不同的作者。

添加了示例,DistinctBy中的几个字段:

 res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList(); 
 mcilist = (from mci in mcilist select mci).Distinct().ToList();