You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在LINQ中实现RouteExport复杂对象的扁平化分组并保留空子对象

解决方案:基于CustomerNumber扁平化RouteExport列表

我来帮你搞定这个需求!看起来你需要把包含多客户号的RouteExport对象列表,拆分成每个客户号对应一条独立记录的扁平化结构,同时保留关联的Route、Section和Sequence字段(没有的话设为null)。

先补全假设的完整模型(根据你的描述补充)

首先我把你没写完的RouteExport模型补全,方便后续代码示例:

public class RouteExport 
{
    public string Name { get; set; } // 对应你需求里的Route字段
    public string Term { get; set; }
    public List<string> CustomerNumbers { get; set; } // 存储多个客户号的列表
    public string Section { get; set; }
    public int? Sequence { get; set; } // 用可空类型处理无值的情况
}

核心实现代码(用LINQ完成扁平化)

我们可以用LINQ的SelectMany方法来展开每个RouteExport里的客户号列表,同时生成你需要的匿名对象:

// 假设你已有RouteExport对象列表
var routeExportList = new List<RouteExport>
{
    // 测试数据示例
    new RouteExport
    {
        Name = "route1",
        CustomerNumbers = new List<string> { "1235" },
        Section = "section2",
        Sequence = 2
    },
    new RouteExport
    {
        Name = "route1",
        CustomerNumbers = new List<string> { "1234" },
        Section = null,
        Sequence = null
    }
};

// 执行扁平化操作
var flattenedResult = routeExportList
    .SelectMany(export => export.CustomerNumbers.Select(custNum => new
    {
        CustomerNumber = custNum,
        Route = export.Name,
        Section = export.Section,
        Sequence = export.Sequence
    }))
    .ToList();

代码逻辑说明

  • SelectMany的作用是把嵌套的列表展开:它会遍历每个RouteExport对象,然后把该对象的CustomerNumbers列表拆成单独的条目,每个条目对应一个客户号。
  • 对于每个拆分出来的客户号,我们直接映射到你需要的匿名对象结构:
    • CustomerNumber取当前遍历的客户号
    • Route取原RouteExport的Name字段
    • Section和Sequence直接复用原对象的值(如果原对象没有设置,自然就是null,符合你的需求)

额外需求扩展(如果需要分组)

如果你还需要按CustomerNumber对结果进行分组,可以在上面的代码后追加GroupBy:

var groupedResult = flattenedResult
    .GroupBy(item => item.CustomerNumber)
    .ToList();

这样你就能得到以客户号为键,对应所有相关记录的分组集合。

内容的提问来源于stack exchange,提问作者dumbchemistry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:40:59