如何过滤 Entity Framework Core 中包含的可选模型

问题描述 投票:0回答:2

我正在使用 .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));

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

参数可能为空引用参数。

我该如何解决这个问题?我知道如果我在类的声明中添加“必需”,所有问题都可以解决,但我的关系确实是可选的,所以添加这对我来说似乎是错误的。

c# .net entity-framework orm foreign-keys
2个回答
0
投票

如果您使用 EF Core 5 或更高版本,则可以使用筛选的 Include 方法,该方法允许您在包含的导航属性上指定Where 子句。

https://datainfofinder.com/question/filter-an-optional-model-inside-include-in-entity-framework-core/


0
投票

您可以使用 null-forgiving 运算符:

machineScheduleDto = _context
     .AsNoTracking()
     .Include(m => m.Shifts!.Where(s => s.Type == shiftType));
© www.soinside.com 2019 - 2024. All rights reserved.