无法在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
字段HasAdminApproved
为true
尝试更换
.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允许空值时有用