我有一个名为UserTenders
的表与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
答案 0 :(得分:30)
尝试替换
.Where(tender => tender.HasAdminApproved.Equals(true))
使用:
.Where(tender => tender.HasAdminApproved == true)
或者如前所述@Ladislav Mrnka,如果您的字段为bool?
.Where(tender => tender.HasAdminApproved)
答案 1 :(得分:19)
@Ladislav告诉你正确答案(.Where(tender => tender.HasAdminApproved)
),但你可能想知道为什么会收到这条消息。
您正试图致电System.Boolean.Equals(Object obj)
。所以你要拳击常数true
。正如消息所说,L2E不支持像System.Object
这样的非原始类型的const。因此错误。
答案 2 :(得分:6)
我遇到了由不同问题引起的相同异常:char与用作常量的字符串。我的选择看起来像这样:
from p in Person
select new Foo
{
FullName = p.FirstName + ' ' + p.LastName
}
我在查询中的其他位置的布尔条件(即"其中p.IsActive")工作正常。我不得不切换到使用字符串:
from p in Person
select new Foo
{
FullName = p.FirstName + " " + p.LastName
}
这显然不是OP问题的答案,但是我无法找到与char / string问题类似的问题,因此我想将其发布给其他人'益处。
答案 3 :(得分:2)
只是想指出,你也可以使用tender.HasAdminApproved.HasValue.Equals(true))...这在bool允许空值时有效