无法创建类型Linq错误的常量值

时间:2015-05-14 12:16:05

标签: c# linq entity-framework

我试图从整个EF中获取MSSQL数据库中的数据。

请参阅以下代码:

model.events =
            _FoxDB.DWH_EventsBasicData.Where(
                e => e.Event_StartTime >= model.StartDate && e.Event_EndTime <= model.EndDate).ToList();

model.Tps = _FoxDB.DWH_TrainingProgramsBasicData.Where(
                t => model.events.Any(e => e.EventTrainingProgram_ID.Equals(t.TrainingProgramID))).Select(t => new EntityDropDown()
                {
                    ID = t.TrainingProgramID,
                    Name = t.TrainingProgramName
                }).ToList();

在第一行我得到的事件列表&gt;该部分工作正常,我也将其转换为ToList,因此它将在本地运行。

我想获得事件集合中存在的培训计划列表。

关于这个错误和文章我读的答案很少,但我仍然不了解这个问题。

错误:Unable to create a constant value of type 'FoxConcept.Models.DALModels.DWH_EventBasicData'. Only primitive types or enumeration types are supported in this context

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

据我所知此错误是因为您将model.events加载到内存中,然后尝试在查询数据库时使用它。我不确定,但它应该适合你:

model.Tps = _FoxDB.DWH_TrainingProgramsBasicData
                .AsEnumerable() // I added this
                .Where(t => 
                    model.events
                        .Any(e => e.EventTrainingProgram_ID.Equals(t.TrainingProgramID)))
                        .Select(t => new EntityDropDown()
                        {
                            ID = t.TrainingProgramID,
                            Name = t.TrainingProgramName
                        }).ToList();