Unable to create a constant value of type 'System.Object' in Entity Framework
I have a table named UserTenders
having many-to-one relationship with aspnet_Membership
table.
var tenders = ctx.UserTenders
.Where(tender => tender.HasAdminApproved.Equals(true))
.ToList();
The error is
System.NotSupportedException
Unable to create a constant value of type 'System.Object'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.
This snippet below works.
var tenders = ctx.UserTenders.ToList();
What could be wrong in my code? Feel like I am missing something very trivial.
I would like to filter all those rows that have the bit
field HasAdminApproved
as true
Try replacing
.Where(tender => tender.HasAdminApproved.Equals(true))
With:
.Where(tender => tender.HasAdminApproved == true)
Or as previously suggested by @Ladislav Mrnka if your field is bool?
.Where(tender => tender.HasAdminApproved)
@Ladislav told you the correct answer (.Where(tender => tender.HasAdminApproved)
), but you might wonder why you get this message.
You're trying to call System.Boolean.Equals(Object obj)
. So you're boxing the constant true
. And L2E, as the message says, has no support for a const of a non-primitive type like System.Object
. Hence the error.
I had the same exception caused by a different problem: a char versus a string used as a constant. My select looked like this:
from p in Person
select new Foo
{
FullName = p.FirstName + ' ' + p.LastName
}
The boolean conditionals I had elsewhere in the query (i.e. "where p.IsActive") worked fine. I had to switch to using a string:
from p in Person
select new Foo
{
FullName = p.FirstName + " " + p.LastName
}
This obviously is not the answer to the OP's question, but I was unable to find a similar question with the char/string issue so I wanted to post it for others' benefit.
Just wanted to point out, you could have also used tender.HasAdminApproved.HasValue.Equals(true))... this works when bool allows nulls
精彩评论