【发布时间】:2019-10-28 14:42:19
【问题描述】:
我有一个嵌套了几层的对象列表...我正在尝试将此列表展平为一个新的匿名类型列表...或者我可以创建一个新类,它不会没关系...我只需要能够在树的各个级别选择特定数据并将其展平即可。
嵌套结构如下所示:
TopResult contains -> List<StepResult> each StepResult contains -> List<PropResult> each PropResult contains -> List<PropBinary>
我需要展平嵌套结构,并且由于某种原因,当我尝试使用 SelectMany 进行此操作时,我的结果一直是 null... 这是我正在尝试做的事情:
var resultsModified = results
.SelectMany(x => (x.StepResults == null ? new List<StepResult>() : x.StepResults)
.SelectMany(s => (s.PropResults == null ? new List<PropResult>() : s.PropResults)
.SelectMany(p => (p.PropBinary == null ? new List<PropBinary>() : p.PropBinary)
.Select(b => new
{
SerialNumber = x.SerialNumber,
StationId = x.StationId,
StartTime = x.StartTime,
ExecutionTime = x.ExecutionTime,
Status = x.Status,
UserLogin = x.UserLogin,
StepName = s == null ? "" : s.StepName,
StepType = s == null ? "" : s.StepType,
StepOrderNumber = s == null ? null : s.OrderNumber,
SequenceName = s == null ? "" : s.SequenceName,
StepStatus = s == null ? "" : s.Status,
PropName = p == null ? "" : p.Name,
PropTypeName = p == null ? "" : p.TypeName,
PropTypeValue = p == null ? null : p.TypeValue,
PropOrderNumber = p == null ? null : p.OrderNumber,
PropCategory = p == null ? null : p.Category,
PropData = p == null ? null : p.Data,
PropBinaryData = b == null ? null : b.Data
})))).ToList();
所有的列表都被初始化为新的列表,所以它们都不应该是空的……但我还是在做空检查,因为此时我想不出还有什么可以尝试的。
有没有人可以指出我缺少什么才能使这个嵌套列表变平?
【问题讨论】:
-
一些扩展方法会让这段代码更漂亮
-
我目前有一些扩展可以清除所有空检查...只是没有拉入我编写它们的库。您还有其他推荐的扩展方法吗?