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

nav*_*een 21 c# asp.net entity-framework

我有一个名为UserTendersaspnet_Membership表有多对一关系的表.
我正在使用EntityFramework 4.0,当我尝试这样的东西时,它会出错.

var tenders = ctx.UserTenders
    .Where(tender => tender.HasAdminApproved.Equals(true))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

错误是

System.NotSupportedException
无法创建类型为"System.Object"的常量值.
在此上下文中仅支持原始类型(例如Int32,String和Guid').

下面的代码片段有效.

var tenders = ctx.UserTenders.ToList();
Run Code Online (Sandbox Code Playgroud)

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

我想过滤所有那些行bitHasAdminApprovedtrue

Nic*_*dke 33

尝试更换

.Where(tender => tender.HasAdminApproved.Equals(true))
Run Code Online (Sandbox Code Playgroud)

附:

.Where(tender => tender.HasAdminApproved == true)
Run Code Online (Sandbox Code Playgroud)

或者正如之前由@Ladislav Mrnka所建议的,如果你的领域是 bool?

.Where(tender => tender.HasAdminApproved)
Run Code Online (Sandbox Code Playgroud)


Cra*_*ntz 20

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

你正试图打电话System.Boolean.Equals(Object obj).所以你是拳击常数true.正如消息所说,L2E不支持非原始类型的const System.Object.因此错误.


Dav*_*ers 6

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

from p in Person
select new Foo
{
  FullName = p.FirstName + ' ' + p.LastName
}
Run Code Online (Sandbox Code Playgroud)

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

from p in Person
select new Foo
{
  FullName = p.FirstName + " " + p.LastName
}
Run Code Online (Sandbox Code Playgroud)

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