C# 使用Linq将字符串转换为可为空的DayOfWeek字段会导致错误

C# 使用Linq将字符串转换为可为空的DayOfWeek字段会导致错误,c#,entity-framework,linq,C#,Entity Framework,Linq,在我的sql数据库中,WorkDay字段是字符串格式的,在模型中,它是可为空的DayOfWeek,即PublicDayOfWeek?WorkDay{get;set;}。将数据库WorkDay字段转换为模型WorkDay字段时,会产生如下错误: 无法将表达式“TableTaffSchedule”转换为SQL和 无法将其视为本地表达式 我还尝试创建三种不同的linq语句,如下所示 1从StaffSchedule表中检索数据。 2对其应用选择操作。 3对所选数据应用AddRange操作 results

在我的sql数据库中,WorkDay字段是字符串格式的,在模型中,它是可为空的DayOfWeek,即PublicDayOfWeek?WorkDay{get;set;}。将数据库WorkDay字段转换为模型WorkDay字段时,会产生如下错误:

无法将表达式“TableTaffSchedule”转换为SQL和 无法将其视为本地表达式

我还尝试创建三种不同的linq语句,如下所示

1从StaffSchedule表中检索数据。 2对其应用选择操作。 3对所选数据应用AddRange操作

results.AddRange(dataContext.StaffSchedules
                            .Where(x => !x.Excluded)
                            .Where(x => x.DistrictID == districtId && x.District.Active && (x.Position == positionTeacher || x.Position == positionDirector || x.Position == positionAssistant || x.Position == positionAssistantDirector))
                           .Select(x => new Core.StaffSchedule()
                            {
                                ID = x.ID,
                                Staff = x.Staff.SelectSummary(),
                                Position = (StaffPosition)Enum.Parse(typeof(StaffPosition), x.Position, true),
                                Class = refs.Class,
                                District = x.District.SelectSummary(),
                                Time = null,
                                Reoccurring = false,
                                Inherited = true,
                                ReoccourringStart = x.ReoccourringStart,
                                ReoccourringEnd = x.ReoccourringEnd,
                                WorkDay = x.WorkDay == null ? (DayOfWeek?)null : (DayOfWeek)Enum.Parse(typeof(DayOfWeek), x.WorkDay, true)
                            }));
这是字符串到可为空的DayOfWeek字段的转换代码。这在我的案例中导致了一个错误

WorkDay = x.WorkDay == null ? (DayOfWeek?)null : (DayOfWeek)Enum.Parse(typeof(DayOfWeek), x.WorkDay, true) 
我已经通过下面的链接

尝试通过调用ToList将dataContext.StaffSchedules转换为IEnumerable 方法,然后再进行如下查询

results.AddRange(dataContext.StaffSchedules.ToList()
                        .Where(x => !x.Excluded)....the rest of you query 

搜索IEnumerable和IQueryable之间的差异以获得更详细的解释

您无法将任何C代码转换为SQL,因此x.WorkDay==null?DayOfWeek?null:DayOfWeekEnum.ParsetypeofDayOfWeek,x.WorkDay,true在Linq中对实体无效

尝试在执行查询后选择数据,方法是在选择之前写入一个numerable。不要在查询开始时执行此操作,因为您将从db表中获取所有数据

results.AddRange(dataContext.StaffSchedules
    //everything (well almost) from this point is going to be translated into SQL
    .Where(x => !x.Excluded)
    .AsEnumerable() //everything from here is going to be executed after the query ends so it can be any C# code
    .Select(x => new Core.StaffSchedule()
    {
        //now this should work
        WorkDay = x.WorkDay == null ? (DayOfWeek?)null : (DayOfWeek)Enum.Parse(typeof(DayOfWeek), x.WorkDay, true)
    });

为什么在异常消息中会显示“TableStaffSchedule”?dataContext.StaffSchedules的确切类型是什么?