首页 > 解决方案 > 总结在列表属性列表中

问题描述

我有以下结构,我想总结一个属性列表

public class Space
{       
    public AirBalance AirBalance { get; set; } = new();      
}

public class AirBalance
{
    public bool AllowVariableExhaust { get; set; }
    public SpaceVentilationAirflow VentilationAirflow { get; set; } = new();
}
public class SpaceVentilationAirflow 
{
    public List<A621VentilationAirflow> A621VentilationAirflows { get; set; } = new();
}

public class A621VentilationAirflow 
{
    public double BreathingZoneVentilation { get; set; }
}

我试图总结 A621VentilationAirflow 的 BreathingZoneVentilation 的所有空间,我的呼吸区通风值为 1115.05。当我使用下面的代码进行总结时,即使我有两个空格和一个A621VentilationAirflow存在的对象列表,它也总是给我相同的值。

 Spaces?.Sum(a => a?.AirBalance?.VentilationAirflow?.A621VentilationAirflows.Sum(a => a.BreathingZoneVentilation))

谁能让我知道我在上面的代码中做错了什么?提前谢谢了

标签: c#

解决方案


我觉得您需要将代码更改为:

 Spaces?.Sum(a => a?.AirBalance?.VentilationAirflow?.A621VentilationAirflows.Sum(b => b.BreathingZoneVentilation))

此外,使用投影 (Select / SelectMany) 您可以获得更易读的 (imo) 查询:

        var y = spaces
            .Select(c => c.AirBalance)
            .Select(c => c.VentilationAirflow)
            .SelectMany(c => c.A621VentilationAirflows)
            .Sum(c => c.BreathingZoneVentilation);

https://dotnetfiddle.net/RBX9aX


推荐阅读