我使用的是.NET 7,我有以下模型类:

public class MachineSchedule : BaseModel
    {
        public int MachineScheduleId { get; set; }
        public EWeekDay WeekDay { get; set; }
        public TimeSpan InitialProductionTime { get; set; }
        public TimeSpan FinalProductionTime { get; set; }
        public DateTime? UpdatedAt { get; set; }

        #region Relationships

        public virtual ICollection<MachineOperation>? MachineOperations { get; set; }
        public virtual ICollection<Shift>? Shifts { get; set; }
        public virtual ICollection<ScheduledStop>? ScheduledStops { get; set; }

        #endregion
    }

我想要进行查询过滤,例如,"Shift"模型类,所以我有:

machineScheduleDto = _context
         .AsNoTracking()
         .Include(m => m.Shifts.Where(s => s.Type == shiftType));

但由于我的关系是可选的,我收到以下警告:

参数可能为空引用实参.

我怎么才能解决这个问题?我知道如果我在类的声明中添加"Required",所有的问题都解决了,但我的关系真的是可选的,所以添加这个对我来说似乎是错误的.

推荐答案

您可以使用容空运算符(!):

machineScheduleDto = _context
     .AsNoTracking()
     .Include(m => m.Shifts!.Where(s => s.Type == shiftType));

...我想知道它是否会比代码运行得更快:

machineScheduleDto = _context.Shifts!
     .AsNoTracking()
     .Where(s => s.Type == shiftType)
     .Include(c => c.MachineSchedule)
     .Select(c => c.MachineSchedule);

Csharp相关问答推荐

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

为什么我在PuppeteerSharp中运行StealthPlugin时会出现错误?

错误NU 1301:无法加载源的服务索引

有没有办法把+02:00转换成TimeSpan?""

使用LayoutKind在C#中嵌套 struct .显式

为什么总输出就像12.3没有一分一样?

Blazor. NET 8—阶段启动配置文件不启动网站VS2022

Select Many和默认IfEmpty内部Select Many错误工作

Blazor EventCallback<;MyType<;T>;>;

Appsettings.json未加载.Net 8 Blaazor Web程序集

Amazon SP-API确认发货不设置&Quot;递送服务

注册所有IMediatR类

如何使用C#中的主构造函数功能使用多个构造函数?

我如何让我的秒表保持运行场景而不重置

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

实体框架-IsRequired()与OnDelete()

为什么我的自定义Json.net转换器不工作?

SharpZipLib在文件名前加上目录名,生成tar.gz

如何使用LINQ在C#中填充列表列表?