[英]C# Linq - Refactoring ForEach Loop with Sub List
我试图重构一些数据以显示一些图表。
我似乎无法弄清楚为什么使用以下内容,它列出了顶部的所有值,而不是像源数据那样按顺序排列。
var categories = VehicleSales.Select(v => v.name).Distinct().ToList();
var refactoredResults = new List<StackedColumnChart>();
foreach (var category in categories)
{
var subresult = VehicleSales.Where(x => x.vehicleType == category)
.GroupBy(x => x.vehicleType)
.Select(gcs => new StackedColumnChart
{
Category = category,
Values = gcs.Select(x => (int)x.data).DefaultIfEmpty(0).ToList()
}).ToList();
refactoredResults.AddRange(subresult);
}
源数据:
那么实际结果和预期结果:
提前致谢!
您可以在没有循环并选择不同值的情况下执行此操作,只需使用GroupBy
方法和 map 使用Select
将每个组到StackedColumnChart
var refactoredResults = VehicleSales
.GroupBy(s => s.Category)
.Select(g => new StackedColumnChart
{
Category = g.Key,
Values = g.Select(s => s.Value).ToList()
})
.ToList();
如果原始数据未排序并且您需要按周数对值进行排序,则可以在选择值之前使用OrderBy
子句Values = g.OrderBy(s => s.WeekNumber).Select(s => s.Value).ToList()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.