获取列表中不同值的列表
在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();