Entity Framework - Linq - No se puede crear un valor constante de tipo 'Sistema.Objeto'. Solo tipos primitivos

entity-framework expression-trees linq

Pregunta

Tengo un método para construir una expresión para una consulta de linq para un tipo, una propiedad y un valor dados. Esto funciona de maravilla siempre y cuando la propiedad en el tipo NO sea anulable. Aquí está el ejemplo del que estoy trabajando ( http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees ) Llamo al método Equals en la propiedad. Sin embargo, he descubierto que el método Equals para tipos Nullable toma un Objeto como parámetro en lugar del tipo Nullable. Intenté usar GetValueOrDefault para ocultar los valores nulos, pero EF no admite ese método. Como ejemplo simple, el siguiente código arrojará un error:

decimal? testVal = new decimal?(2100);
        var test = (from i in context.Leases where i.AnnualRental.Equals(testVal) select i).ToList();

Sin embargo, si utiliza == en lugar del método Equals (), funcionará bien. No estoy seguro de cómo convertir el código para usar == en lugar de Equals () sin embargo. Cualquier sugerencia será muy apreciada.

Respuesta popular

Si dice == , genera una BinaryExpression con NodeType como ExpressionType.Equal . http://msdn.microsoft.com/en-us/library/bb361179.aspx

Si dices .Equals(x) , MethodCallExpression una MethodCallExpression . Los MethodCallExpression s que LinqToEntities pueden traducir a Sql es una lista limitada (por ejemplo, ninguno de sus métodos no decorados está en esa lista). Nullable<T>.Equals(x) aparentemente no está en esa lista.

No digas .Equals(x) a LinqToEntities.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué