El uso de un var basado en una enumeración en una cláusula WHERE en el marco de la entidad lanza una excepción

StackOverflow https://stackoverflow.com/questions/1327599

Pregunta

Tengo el siguiente código que arroja una excepción (detalle en los comentarios de código a continuación). Simplemente estoy tratando de utilizar una instancia de una enumeración como parte de la cláusula WHERE. Tengo entendido el mensaje, pero no entiendo por qué EF no puede analizar una enumeración Int32.

Funciona si copio la enumeración de un Int32 y luego filtrar en eso, pero parece muy desordenado.

    Enum MyEnum As Int32
    Zero
    One
    Two
End Enum
Shared Function GetStuff(ByVal EnumValue As MyEnum) As IQueryable
    Dim Db As New MainDb
    Dim DetailList As IQueryable
    Dim MyInt As Int32 = EnumValue

    ' PostalProviderId is an Int column in SQL.
    'DetailList = From D In Db.DeliveryService Where D.PostalProviderId = EnumValue ' This fails.
    DetailList = From D In Db.DeliveryService Where D.PostalProviderId = MyInt ' This works.

    ' The following attempt to enumerate the results yields;
    ' **** System.NotSupportedException was unhandled by user code
    ' **** Message = "Unable to create a constant value of type 'Closure type'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."
    ' **** Source = "System.Data.Entity"
    For Each Thingy In DetailList
        Console.WriteLine(Thingy.ToString())
    Next
    Return DetailList

End Function

¿Hay una solución más elegante que la copia de los valores de enumeración a un int local?

¿Fue útil?

Solución

El problema es que el marco de la entidad no sabe cómo eveluate su enumeración cuando se está construyendo el T-SQL para obtener el int detrás de él. La respuesta corta es que usted tiene que almacenar en una variable temporal y usar eso.

Algunos más información se puede encontrar en:

http://gmontrone.com /post/problem-with-casting-enums-in-linq-to-entities.aspx

y

http: // www .matthidinger.com / archivo / 2008/02/26 / entidad-marco-comparación-frustración-explained.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top