繁体   English   中英

C# Linq - 使用子列表重构 ForEach 循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM