Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为空
Posted
技术标签:
【中文标题】Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为空【英文标题】:Visual Studio assumes return value from FirstOrDefaultAsync() cannot be null 【发布时间】:2021-12-14 02:04:52 【问题描述】:我有以下问题。
var railcarInfo = await (from rt in DbContext.RailcarTrips
where rt.WaybillRailcar.RailcarNumber == clm.RailcarNumber &&
rt.WaybillRailcar.Waybill.CreateDate <= clm.SightingDate
orderby rt.WaybillRailcar.Waybill.CreateDate descending
select new
RailcarTrip = rt,
WaybillCreateDate = rt.WaybillRailcar.Waybill.CreateDate,
IsLoaded = rt.WaybillRailcar.Weight > 0
)
.AsNoTracking()
.FirstOrDefaultAsync();
但由于某种原因,Visual Studio 在此查询之后立即确定 'railcarInfo' 此处不为空。
FirstOrDefaultAsync()
的要点是它返回集合中的第一项,如果集合为空,则返回 null。这里绝对可以为空。谁能明白为什么 Visual Studio 似乎在这里感到困惑?
【问题讨论】:
@Evk 很好的发现,如果它刚刚点击了定义......无论如何,这可能值得回答,你拥有我合法允许给予的所有可用的支持 【参考方案1】:正如docs 中提到的关于此功能和 EF 的内容:
在 EF Core 6.0 之前,公共 API 表面没有为 可空性(公共 API 是“null-oblivious”),有时 打开 NRT 功能时使用起来很尴尬。这显着 包括 EF Core 公开的异步 LINQ 运算符,例如 FirstOrDefaultAsync。公共 API 已针对可空性进行了完整注释 从 EF Core 6.0 开始。
所以您可能使用的是 EF 版本
【讨论】:
以上是关于Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为空的主要内容,如果未能解决你的问题,请参考以下文章