Linq to Sql在where子句中无效

时间:2014-06-18 11:30:52

标签: c# sql sql-server linq sql-server-2008-r2

我有Linq查询:

var notstartedcount = (from te in context.EH_PP_TeacherEvaluations
                       join tesrt in context.EH_PP_TeacherEvaluationStatusesRefTables
                       on te.EH_PP_TESRT_TeacherEvalStatusID equals 
                          tesrt.EH_PP_TESRT_TeacherEvalStatusID
                       where tesrt.EH_PP_TESRT_TeacherEvalStatusID.Equals("1") || 
                             tesrt.EH_PP_TESRT_TeacherEvalStatusID.Equals("")
                       select te).Count();

我只想将Isnull(ColumnName,replacement)置于Sql中的条件。

例如:

where isNull(EH_PP_TESRT_TeacherEvalStatusID,0)=1

我为linq保持了相同的条件:

var notstartedcount = (from te in context.EH_PP_TeacherEvaluations
                       join tesrt in context.EH_PP_TeacherEvaluationStatusesRefTables
                       on te.EH_PP_TESRT_TeacherEvalStatusID equals 
                          tesrt.EH_PP_TESRT_TeacherEvalStatusID
                       where 
                           isnull(tesrt.EH_PP_TESRT_TeacherEvalStatusID.Equals(Null),0).Equals("1") || 
                           tesrt.EH_PP_TESRT_TeacherEvalStatusID.Equals("")
                       select te).Count();

但是在linq的情况下它的错误。

我怎样才能把这个条件纳入其中?

1 个答案:

答案 0 :(得分:3)

只需使用合并??运算符

,其中

(tesrt.EH_PP_TESRT_TeacherEvalStatusID  ?? 0) == 1

或者如果它是一个字符串(对你的代码不是很清楚)

(tesrt.EH_PP_TESRT_TeacherEvalStatusID  ?? "0") == "1"

但是根据给出的示例代码,这似乎没用(第一个版本也应该这样做)。

如果你的意思是

  

获取tesrt.EH_PP_TESRT_TeacherEvalStatusID为NULL或NULL的所有值   tesrt.EH_PP_TESRT_TeacherEvalStatusID == 1

然后

tesrt.EH_PP_TESRT_TeacherEvalStatusID == null || tesrt.EH_PP_TESRT_TeacherEvalStatusID == 1

tesrt.EH_PP_TESRT_TeacherEvalStatusID ?? 1 == 1