假设我有以下对象
public class DepartmentSchema
{
public int Parent { get; set; }
public int Child { get; set; }
}
我有一个
List<DepartmentSchema>
具有以下结果:Parent | Child
---------------
4 | 1
8 | 4
5 | 7
4 | 2
8 | 4
4 | 1
我想对所有具有相同父值和子值的对象进行分组
分组后,我想要的结果是以下列表
Parent | Child
---------------
4 | 1
8 | 4
5 | 7
4 | 2
我成功使用IGrouping =>
departmentSchema.GroupBy(x => new { x.Parent, x.Child }).ToList();
但结果是
List<IGrouping<'a,DepartmentSchema>>
而不是List<DepartmentSchema>
我知道我可以创建一个新的foreach循环并从组列表中创建一个新的
List<DepartmentSchema>
,但是我想知道是否还有更好的方法提前致谢
最佳答案
由于您想要的是每个组中的一个元素,因此只需选择它们即可:
departmentSchema
.GroupBy(x => new { x.Parent, x.Child })
.Select(g => g.First())
.ToList();
但是,由于您实际上在做的是列出一系列不同的元素,所以我认为您真正想要的序列运算符是Jon的
DistinctBy
。在这里阅读有关内容:LINQ's Distinct() on a particular property