visual tutorial studio net mvc framework first espaƱol code asp c# asp.net entity-framework

c# - tutorial - entity framework visual studio 2017



No se puede crear un valor constante de tipo ''System.Object'' en Entity Framework (4)

@Ladislav le respondió la respuesta correcta ( .Where(tender => tender.HasAdminApproved) ), pero es posible que se pregunte por qué recibe este mensaje.

Estás intentando llamar a System.Boolean.Equals(Object obj) . Así que estás boxeando la true constante. Y L2E, como dice el mensaje, no tiene soporte para una constante de un tipo no primitivo como System.Object . De ahí el error.

Tengo una tabla llamada UserTenders tiene una relación de varios a uno con la tabla aspnet_Membership .
Estoy usando EntityFramework 4.0 y cuando intento algo como esto, se produce un error.

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

El error es

System.NotSupportedException
No se puede crear un valor constante de tipo ''System.Object''.
En este contexto, solo se admiten tipos primitivos (''como Int32, String y Guid'').

Este fragmento de código a continuación funciona.

var tenders = ctx.UserTenders.ToList();

¿Qué podría estar mal en mi código? Siento que me falta algo muy trivial.

Me gustaría filtrar todas aquellas filas que tienen el campo de bit HasAdminApproved como true


Solo quería señalar, también podría haber usado tender.HasAdminApproved.HasValue.Equals (true)) ... esto funciona cuando bool permite nulos


Tratar de reemplazar

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

Con:

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

¿O como lo sugirió previamente @Ladislav Mrnka si su campo es bool?

.Where(tender => tender.HasAdminApproved)


Tuve la misma excepción causada por un problema diferente: un carácter frente a una cadena utilizada como constante. Mi selección se veía así:

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

Los condicionales booleanos que tenía en otra parte de la consulta (es decir, "donde p.IsActive") funcionaron bien. Tuve que cambiar a utilizar una cadena:

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

Obviamente, esta no es la respuesta a la pregunta del OP, pero no pude encontrar una pregunta similar con el problema de caracteres / cadenas, así que quería publicarlo para el beneficio de otros.