我有这个 linq 查询。它抱怨警告消息。
警告 CS8603:可能返回空引用
代码:
return await _applicationDbContext.Pies
.Include(x => x.Portions).AsSingleQuery()
.Include(x => x.Ingredients).AsSplitQuery()
.SingleOrDefaultAsync(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)
更重要的是,这使得它变得丑陋,到处都是曲线。
有什么办法可以解决吗?
看了下面的SO帖子,但不知道该怎么做。
SingleOrDefaultAsync()完全执行方法名称中的操作,它尝试查找单个条目,如果未找到任何条目,则返回默认值。
引用类型(Pie在本例中为您的对象)的默认值是 null,因此会出现警告。
您可以返回Task<Pie?>或以某种方式处理空值。一种方法是使用.SingleAsync()替代方法,如果没有找到任何内容,它将抛出异常 - 但因此它永远不会返回 null。
该方法返回一个Task<Pie>.
末尾的has意味着如果找不到匹配的项目return ...,它将返回。SingleOrDefaultAsync(...)iddefault(Pie)null
您需要决定是否:
Task<Pie?>让调用代码知道它可以返回 null。SingleAsync(...)这样如果未找到匹配,它将引发运行时异常id。