[英]Group nested list with linq
我有一个嵌套的对象列表。 我需要通过identifierA
和Sum
对其数字属性进行分组,嵌套列表应分别分组:
public class TypeA
{
public String identifierA{ get; set; }
public Int32 number { get; set; }
public List<TypeB> nestedList { get; set; }
}
public class TypeB
{
public String identifierB { get; set; }
public Int32 otherNumber { get; set; }
}
所以我期待这样的事情:
var List<TypeA> groupedList = (from a in TypeAList
group a by a.identifierA
into groupedData
select new TypeA
{
identifierA = groupedData.Key,
number = groupedData.Sum(g => g.number ),
nestedList = //HOW TO GROUP NESTED PART?
}).ToList();
SelectMany
采用IEnumerable<SomethingWithAnIEnumerable>
并将所有SomethingWithAnIEnumerable
的选定IEnumerable
s展平为单个IEnumerable
:
nestedList = groupedData.SelectMany(pa => pa.nestedList).ToList()
我认为这将解决您的问题。
List<TypeA> list = TypeAList
.GroupBy(a => a.identifierA)
.Select(
g =>
new TypeA
{
identifierA = g.Key,
number = g.Sum(n => n.number),
nestedList =
g.SelectMany(l => l.nestedList)
.GroupBy(b => b.identifierB)
.Select(
gg =>
new TypeB
{
identifierB = gg.Key,
otherNumber = gg.Sum(b => b.otherNumber)
}).ToList()
}).ToList();
如果要将列表分组为一个用途
nestedList = groupedData.SelectMany(d=>d.nestedList)
如果你想要该列表的Sum
,请使用
nestedList = groupedData.SelectMany(d=>d.nestedList).Sum(o=>o.otherNumber)
我认为你的IdentfierB可能是某种键,你的结果应该反映出Grouped和Summed TypeBs。
List<TypeA> groupedList = TypeAList
.GroupBy(a => a.identifierA)
.Select(g => new TypeA()
{
identierA = g.Key,
number = g.Sum(a => a.number)
nestedList = g.SelectMany(a => a.nestedList)
.GroupBy(b => b.identifierB)
.Select(g2 => new TypeB()
{
identifierB = g2.Key,
otherNumber = g2.Sum(b => b.otherNumber)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.