假设我有以下对象

 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

10-06 13:15