在c#中,假设我有一个名为Note的类,它有三个字符串成员变量。
public class Note
{
public string Title;
public string Author;
public string Text;
}
我有一个类型列表
List<Note> Notes = new List<Note>();
获得Author列中所有不同值的列表的最干净的方法是什么?
我可以遍历列表,并将所有不重复的值添加到另一个字符串列表中,但这似乎既脏又低效。我有一种感觉,有一些神奇的Linq结构可以在一行中做到这一点,但我还没能想出任何东西。
Jon Skeet写了一个叫做morelinq的库,它有一个DistinctBy()操作符。参见这里的实现。您的代码看起来像
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
更新:
在重新阅读了你的问题后,如果你只是在寻找一组不同的作者,Kirk有正确的答案。
增加了sample, DistinctBy中的几个字段:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
Jon Skeet写了一个叫做morelinq的库,它有一个DistinctBy()操作符。参见这里的实现。您的代码看起来像
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
更新:
在重新阅读了你的问题后,如果你只是在寻找一组不同的作者,Kirk有正确的答案。
增加了sample, DistinctBy中的几个字段:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();