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