从某个地方引用null我没有';我不知道在哪里

本文关键字:在哪里 我不知道 null 方引用 引用 | 更新日期: 2023-09-27 18:27:52

我以为我涵盖了所有空的可能性,但这一行:

double indicatorValue = 
    step2.Count() > 0 ? step2.Sum(iv => ((double?)iv.Value) ?? 0d) : 0d;

给我这个错误:

无法创建类型为"System.Int32[]"的null常数值。此上下文中只支持实体类型、枚举类型或基元类型。

拜托,我读过一些帖子,没有一篇能给我指明正确的方向。

编辑:相关代码?

var step1 = db.IndicatorValues
    .Where(iv =>
        iv.Year == _ano &&
        iv.IdIndicator == item.IdIndicator &&
        idSites.Contains(iv.IdSite)
    );
var step2 = step1.Where(iv => 
    (isYTD == true ? iv.Month <= _mes : iv.Month == _mes)
);

从某个地方引用null我没有';我不知道在哪里

我能看到的"null"情况如下:

class Program
{
    class Test
    {
        public decimal? Value { get; set; }
    }
    static void Main(string[] args)
    {
        var step2 = new Test[] { null };
        double indicatorValue = step2.Count() > 0 ? step2.Sum(iv => ((double?)iv.Value) ?? 0d) : 0d;
        Console.WriteLine(indicatorValue);
    }
}

这给了我NullReferrence异常

为了进一步诊断您的问题,我建议在调试阶段使用step2Test = step2.ToArray() ,而不是表达式中的step2变量

在获取数组实例的阶段,您可能会遇到与您在描述中所写的错误相同的错误,那么与indicatorValue计算的逻辑无关

int数组中关于null的错误可以在这里:idSites.Contains(iv.IdSite)可能的问题iv.IdSite在特定情况下为空

请尝试以下

idSites.Contains(iv.IdSite) 

放入

iv.IdSites == null ? false : ( idSites == null ? false : idSites.Contains(iv.IdSite))

step1step2IQueryable,而不是IEnumerable

根据代码的其余部分(step1step2用于其他用途),您可以通过以下方式修复此问题:

a。将step2转换为存储器内集合(例如使用.ToList()

b。在步骤2中过滤为null的IndicatorValues。

c。double indicatorValue = step2.Count() > 0 ? step2.Where(iv => iv.HasValue).Sum(iv => iv.Value) : 0d;

不确定什么是iv.Value类型,为什么需要将其转换为double?但其中一种解决方案可能会奏效。

相关文章: