首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在EF LINQ查询if-子句中引发的空引用异常

在EF LINQ查询if-子句中引发的空引用异常
EN

Stack Overflow用户
提问于 2018-01-08 19:52:58
回答 3查看 15.2K关注 0票数 6

我找不到确切的词来解释发生了什么,所以如果这是一个重复的问题,我道歉。

我尝试在LINQ查询中执行一个非常简单的条件if -子句,以检查一个对象是否为null,然后验证它的属性是否等于我想要比较的列。

守则:

代码语言:javascript
运行
复制
public IEnumerable<Plan> GetPlans(Plan plan)
    {
        return _context.Plans.Where(e =>
            e.Situation == plan.Situation &&
            e.Notes.Contains(plan.Notes) &&
            (plan.Excercise != null && plan.Exercise.Year > 0 ? e.Exercise.Year == plan.Exercise.Year: true)).ToList();
    }

在.NET 4.5中,我已经做过十几次这样的检查了,没有任何问题。

但是现在,在我正在进行的第一个.NET Core2.0项目中,我遇到了以下错误:

代码语言:javascript
运行
复制
An exception was thrown while attempting to evaluate a LINQ query parameter expression. To show additional information call EnableSensitiveDataLogging() when overriding DbContext.OnConfiguring.

内部异常更清楚:空引用异常

经过一些测试后,我发现当plan.Exercise出现空时会发生错误,即使我试图避免异常,首先检查它是否为空。

如果我试图在“立即”窗口中直接执行相同的检查,它将返回"false",这是应该的。

我是不是漏掉了什么?可能是EF虫?例如,在.NET 4.5中,而不是在.NET Core2.0中,有什么特别的原因吗?

提前谢谢。

更新

伊凡的解决方案完成了以下工作:

重写?:构造与等效的{##**$}}

代码语言:javascript
运行
复制
plan.Excercise == null || plan.Exercise.Year <= 0 || e.Excercise.Year == plan.Exercise.Year
EN

Stack Overflow用户

发布于 2019-06-26 10:29:23

若要避免此问题,请确保不对空对象进行计算。

代码语言:javascript
运行
复制
var exercice = await _repositoryExercice.FirstOrDefaultAsync(i => i.IsCurrent);
var depenses = _repositoryDepense.GetAll()
                .Where( e => e.ExerciceId.Equals(exercice.Id))
                .WhereIf(AbpSession.TenantId.HasValue, m => m.TenantId.Value.Equals(AbpSession.TenantId.Value))
                .ToList();

这个问题是由该行.Where( e => e.ExerciceId.Equals(exercice.Id))引起的,因为变量exercice为null。

最好的做法是,我把这一行改为:

代码语言:javascript
运行
复制
...
.WhereIf(exercice != null, e => e.ExerciceId.Equals(exercice.Id))
...
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48157183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档