【问题标题】:LINQ to entity Error: "Unable to create a null constant value of type ''System.Int32[]". Only entity types, enumeration typesLINQ to entity 错误:“无法创建 ''System.Int32[] 类型的空常量值”。只有实体类型、枚举类型
【发布时间】:2014-11-21 00:14:35
【问题描述】:

我在对我的 RosterSummaryData_Subject_Local 实体执行 linq 查询时收到列出的错误。我似乎无法找出问题所在或解决方案。

无法创建类型为“System.Int32[]”的空常量值。仅有的 支持实体类型、枚举类型或原始类型 这个上下文。

我对代码优先实体上下文的 LINQ 查询:

var subjLocal = customerContext.RosterSummaryData_Subject_Local.Where(s => 
    (s.fkRosterSetID == 0) &&
    (statsInfo.TestInstanceIDsList.Contains(s.fkTestInstanceID)) &&
    (s.fkTestTypeID == statsInfo.TestTypeID) &&
    (statsInfo.SchoolYearIDsList.Contains(s.fkSchoolYearID)) &&
    (s.fkRosterTypeID == 1) &&
    (s.fkSchoolID == 0) &&
    (s.fkDepartmentID == 1) &&
    (s.fkCourseID == 1) &&
    (s.fkPeriodID == 1) &&
    (statsInfo.DemoCatIDsList.Contains(s.fkDemoCommonCategoryID)) &&
    (statsInfo.DemoCodeIDsList.Contains(s.fkDemoCommonCodeID)) &&
    (statsInfo.TestSubjectIDsList.Contains(s.fkTest_SubjectID)));

【问题讨论】:

  • 你确定你所有的列表都是非空的吗? (即TestInstanceIDsList)
  • @KirkWoll 哦,伙计,这很尴尬。谢谢那个地方。其中一个列表为空,我认为它们已正确通过。已解决问题,谢谢
  • EF 错误消息通常有很多不足之处。 :)

标签: c# .net linq entity-framework


【解决方案1】:

听起来您的Int32[] 类型之一是null。尝试在访问 .Contains 方法之前添加一个检查:

var subjLocal = customerContext.RosterSummaryData_Subject_Local.Where(s => 
    (s.fkRosterSetID == 0) &&
    (statsInfo.TestInstanceIDsList != null &&
        statsInfo.TestInstanceIDsList.Contains(s.fkTestInstanceID)) &&
    (s.fkTestTypeID == statsInfo.TestTypeID) &&
    (statsInfo.SchoolYearIDsList != null &&
        statsInfo.SchoolYearIDsList.Contains(s.fkSchoolYearID)) &&
    (s.fkRosterTypeID == 1) &&
    (s.fkSchoolID == 0) &&
    (s.fkDepartmentID == 1) &&
    (s.fkCourseID == 1) &&
    (s.fkPeriodID == 1) &&
    (statsInfo.DemoCatIDsList != null &&
        statsInfo.DemoCatIDsList.Contains(s.fkDemoCommonCategoryID)) &&
    (statsInfo.DemoCodeIDsList != null &&
        statsInfo.DemoCodeIDsList.Contains(s.fkDemoCommonCodeID)) &&
    (statsInfo.TestSubjectIDsList != null &&
        statsInfo.TestSubjectIDsList.Contains(s.fkTest_SubjectID)));

或者,如果它们可以为空(我认为不是,但以防万一),您可以更改上述检查以遵循此模式:

(statsInfo.DemoCatIDsList == null ||
    statsInfo.DemoCatIDsList.Contains(s.fkDemoCommonCategoryID)) &&

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多