以下是我的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()
但我没有获得所需的输出。
答案 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实例,而不是选择匿名类型。