Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为 null

Jon*_*ood 6 c# linq entity-framework .net-core nullable-reference-types

我有以下查询。

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();
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,Visual Studio 在执行此查询后立即判定“railcarInfo”不为 null

在此输入图像描述

要点FirstOrDefaultAsync()是它返回集合中的第一项,如果集合为空,则返回 null。这里肯定可以为空。谁能明白为什么 Visual Studio 似乎在这里感到困惑吗?

Evk*_*Evk 3

正如有关此功能和 EF 的文档中提到的:

在 EF Core 6.0 之前,公共 API 表面未针对可为 null 性进行注释(公共 API 是“null-oblivious”),这使得在打开 NRT 功能时有时使用起来很尴尬。这尤其包括 EF Core 公开的异步 LINQ 运算符,例如 FirstOrDefaultAsync。从 EF Core 6.0 开始,公共 API 已针对可空性进行了完整注释。

所以您可能使用 EF < 6.0 版本