我们可以使用以下代码从列表中提取不同的值集
List<Person> distinctPeople = allPeople
.GroupBy(p => new {p.PersonId, p.FavoriteColor} )
.Select(g => g.First())
.ToList();
假设人有PersonId,FavoriteColor,年龄,地址等。我的要求是我想得到一个单独的列表,该列表应该只包含不同的过滤器数据,例如PersonId,FavoriteColor而不是其他。命令是什么,假设我可以创建一个仅包含PersonId,FavoriteColor的小类
List<Person> distinctPeople = allPeople
.GroupBy(p => new {p.PersonId, p.FavoriteColor} )
.Select(g => new {g.First().PersonId, g.First().FavouriteColor})
.ToList();
更新
如果您有自己的类,例如具有属性PersonalId
和FavouriteColor
的类yourClass
,只需将选择部分更改为
.Select(g => new YourClass{PersonalId = g.First().PersonId, FavouriteColor = g.First().FavouriteColor})
你可以像这样选择你想要的新类:
.Select(g => new {g.PersonId, g.FavoriteColor})
对象将仅包含您选择的内容,在本例中为 PersonId
和 FavoriteColor
。
您可以将 Distinct 扩展与自定义扩展一起使用 IEqualityComparer
,例如
List<Person> distinctPeople = allPeople
.Distinct(new CustomEqualityComparer())
.Select(p=> new{ p.PersonId, p.FavoriteColor})
.ToList();