使用内部列表按列表分组

时间:2017-12-05 09:23:03

标签: c# linq lambda

以下是我的List系列。

public class A
{
    public String id{ get; set; }
    public string name{ get; set; }
    public List<B> nestedList { get; set; }
}
public class B
{
    public String innerid{ get; set; }
    public string innername { get; set; }
}

我想在嵌套集合属性上使用group by 所以我可以输出

  innerid="1",
  innername="Name1",
    {
      id= "1", name= "One"
      id= "2", name= "Two"
      id= "4", name= "Four"
    }
  innerid="2",
  innername="Name2",
    {
      id= "3", name= "Three"
      id= "6", name= "Six"
      id= "8", name= "Eight"
    }

我试过了 .GroupBy(a => a.nestedList.First().innerid).ToList() 但我没有获得所需的输出。

2 个答案:

答案 0 :(得分:1)

假设结果中的项目必须包含A类型的项目,您可以使用查询语法来解决此问题:

 var grouping = from a in collectionOfA
                from b in a.nestedList
                group a by new { b.innerid, b.innername } into g
                select new
                {
                    innerid = g.Key.innerid,
                    innername = g.Key.innername,
                    items = g.ToList()
                };

答案 1 :(得分:0)

您想要反转层次结构,因此按嵌套B分组并将父A列为子项?

var groups = aList
   .SelectMany(a => a.nestedList.Select(b => new { A = a, B = b }))
   .GroupBy(x => new { x.B.innerid, x.B.innername })
   .Select(g => new { 
       g.Key.innerid, 
       g.Key.innername, 
       aItems = g.Select(x => new { x.A.id, x.A.name }) 
    });

您也可以选择原始的A和B实例,而不是选择匿名类型。