无法在Entity Framework中创建“System.Object”类型的常量值

我有一个名为UserTenders的表与aspnet_Membership表有aspnet_Membership关系。
我正在使用EntityFramework 4.0,当我尝试这样的东西时,它会出错。

 var tenders = ctx.UserTenders .Where(tender => tender.HasAdminApproved.Equals(true)) .ToList(); 

错误是

System.NotSupportedException
无法创建“System.Object”类型的常量值。
在此上下文中仅支持基本类型(例如Int32,String和Guid’)。

下面的代码片段有效。

 var tenders = ctx.UserTenders.ToList(); 

我的代码可能有什么问题? 觉得我错过了一些非常微不足道的事情。

我想过滤所有bit字段HasAdminApprovedtrue

尝试更换

 .Where(tender => tender.HasAdminApproved.Equals(true)) 

附:

 .Where(tender => tender.HasAdminApproved == true) 

或者如前所述@Ladislav Mrnka,如果你的领域是bool?

 .Where(tender => tender.HasAdminApproved) 

@Ladislav告诉你正确答案( .Where(tender => tender.HasAdminApproved) ),但你可能想知道为什么你得到这个消息。

您正在尝试调用System.Boolean.Equals(Object obj) 。 所以你是拳击常数true 。 正如消息所说,L2E不支持像System.Object这样的非原始类型的const。 因此错误。

我遇到了由不同问题引起的相同exception:char与用作常量的字符串。 我的选择看起来像这样:

 from p in Person select new Foo { FullName = p.FirstName + ' ' + p.LastName } 

我在查询中的其他地方的布尔条件(即“where p.IsActive”)工作正常。 我不得不切换到使用字符串:

 from p in Person select new Foo { FullName = p.FirstName + " " + p.LastName } 

这显然不是OP的问题的答案,但我无法找到与char / string问题类似的问题所以我想发布它以获得其他人的好处。

只是想指出,你也可以使用tender.HasAdminApproved.HasValue.Equals(true))…这在bool允许空值时有用