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

使用LINQ获取各属性最大值时类型转换错误的解决方法

问题解决方法

错误原因很明确:MaxBy方法返回的是匿名类型的实例对象,但你的EnvironmentOccupiedAndRelativeHumidityFields记录的构造参数要求是double类型,类型不匹配导致报错。MaxBy的作用是找出集合中指定属性值最大的元素,而非直接返回该属性的最大值。

方案1:直接使用Max方法(推荐,代码更简洁高效)

不需要提前转换为匿名类型列表,直接对原集合的属性取最大值,同时保留空值转0的逻辑,还要处理空集合的边界情况:

public static EnvironmentOccupiedAndRelativeHumidityFields GetEnvironmentFields(IEnumerable<LibraryEnvironment> environments)
{
    if (!environments.Any())
    {
        return new EnvironmentOccupiedAndRelativeHumidityFields(0D, 0D, 0D);
    }

    return new EnvironmentOccupiedAndRelativeHumidityFields(
        environments.Max(l => l?.CoolingSetPointOccupied ?? 0D),
        environments.Max(l => l?.HeatingSetPointOccupied ?? 0D),
        environments.Max(l => l?.RelativeHumidityMax ?? 0D)
    );
}

方案2:保留匿名类型列表,修正MaxBy的使用

如果坚持使用原有的匿名类型列表,需要在MaxBy返回元素后,提取对应的属性值传入记录构造器,同时处理空列表的情况:

public static EnvironmentOccupiedAndRelativeHumidityFields GetEnvironmentFields(IEnumerable<LibraryEnvironment> environments)
{
    var occupiedAndHumidityFieldValues = environments
        .Select(l => new
        {
            coolingSetPointOccupied = l?.CoolingSetPointOccupied ?? 0D,
            heatingSetPointOccupied = l?.HeatingSetPointOccupied ?? 0D,
            relativeHumidityMax = l?.RelativeHumidityMax ?? 0D
        }).ToList();

    if (!occupiedAndHumidityFieldValues.Any())
    {
        return new EnvironmentOccupiedAndRelativeHumidityFields(0D, 0D, 0D);
    }

    return new EnvironmentOccupiedAndRelativeHumidityFields(
        occupiedAndHumidityFieldValues.MaxBy(a => a.coolingSetPointOccupied).coolingSetPointOccupied,
        occupiedAndHumidityFieldValues.MaxBy(l => l.heatingSetPointOccupied).heatingSetPointOccupied,
        occupiedAndHumidityFieldValues.MaxBy(l => l.relativeHumidityMax).relativeHumidityMax
    );
}

关键注意事项

  • 必须处理空集合的情况,否则Max或MaxBy会抛出InvalidOperationException
  • 原代码中l?.CoolingSetPointOccupied ?? 0D的空值处理逻辑是正确的,已经将l为null或属性本身为null的情况统一转为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:18:14