在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
相关产品推荐
相关产品推荐

