与等于语句的 LINQ 问题



我收到以下错误:

var answerList = (from answer in db.QuestionAnswers
where answer.tLoginID.Equals(tId) && answer.pLoginID.Equals(pId)
&& answer.Submitted.Equals(submittedVal)
select answer).ToList();

错误是:

无法创建类型为"系统对象"的常量值。只 此上下文支持基元类型或枚举类型。

但是,当我将其更改为:

var answerList = (from answer in db.QuestionAnswers
where answer.tLoginID.Equals(tId) && answer.pLoginID.Equals(pId)
select answer).ToList();

然后我这样做:

answerList.Where(x => x.Submitted.Equals(submittedVal));

它有效... 我错过了什么? 对我来说,这些声明在做同样的事情。 但我不确定为什么它会这样工作。

更新:

在查看了@SergeyLitvinov提供的链接后,我发现Submitted.Equals,一旦我使类型与我的语句相同,我正在检查的列实际上是一个Boolean而不是Integer。 虽然我确实把它从.Equals改成了==.

错误来自 LINQ to Entities 查询提供程序,该提供程序尝试将查询表达式转换为 SQL 语句。 您的第二个示例在测试Submitted.Equals(submittedVal)之前枚举您的 LINQ to 实体查询,这意味着您在本地内存中使用标准 LINQ to 对象(即它不会转换为 SQL)。

最新更新