2014-11-21 60 views
1

我正在接收在我的RosterSummaryData_Subject_Local实体上执行linq查询时列出的错误。我似乎无法弄清楚什么是错误或解决方案。LINQ to entity错误:“无法创建类型为''System.Int32 []”的空常量值。只有实体类型,枚举类型

Unable to create a null constant value of type 'System.Int32[]'. Only entity types, enumeration types or primitive types are supported in this context.

我在我的代码第一实体上下文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))); 
+2

您确定所有的列表都是非空吗? (即'TestInstanceIDsList') – 2014-11-21 00:16:07

+0

@KirkWoll哦,这个人很尴尬。感谢那个地方。其中一个列表为空,我认为它们已正确通过。解决了这个问题,谢谢 – frontin 2014-11-21 00:28:14

+0

EF错误消息通常会有很多不足之处。 :) – 2014-11-21 00:29:37

回答

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)) && 
相关问题