2012-03-21 24 views
8

Tenía un segmento de código en una página asp.net en el archivo de código subyacente. Decidí moverlo a una subrutina pública en un módulo (general_functions.vb). Una vez que hice esto, sin embargo, el código ya no funciona, arroja un error.LINQ to Entities no reconoce el método System.ObjectCompareObjectEqual

En el original de código subyacente que sustituyen el código original con una llamada de este modo:

DeleteResidency(people_id, semester, year) 

Ahora en mi general_functions.vb creé una subrutina pública como sigue:

Public Sub DeleteResidency(delpeople_id, delsemester, delyear) 
    Using dbContext as pbu_housingEntities = New pbu_housingEntities 
     Dim remove_selection = (From p in dbContext.Residents _ 
           Where p.people_code_id = delpeople_id _ 
           Where p.year = delyear _ 
           Where p.semester = delsemester _ 
           Order By p.id Descending _ 
           Select p).FirstOrDefault 
    End Using 
End Sub 

Hay es más código que eso, pero el código anterior es lo que arroja el error. El error que consigo es:

LINQ a Entidades no reconoce el método 'System.Object CompareObjectEqual (System.Object, System.Object, Boolean)' método y este método no se puede traducir en una tienda expresión.

¿Alguien me puede ayudar a entender por qué ocurre esto?

+2

¿Cuál es el tipo de 'semestre'? – Eranga

+0

Todos los valores se emiten como cadenas. – davemackey

+3

Sospecho que hay alguna comparación de tipo no primitivo en sus condiciones. – Eranga

Respuesta

10

Escriba explícitamente sus parámetros en la definición de DeleteResidency Sub Routine. Esto deja menos para que el compilador infiera y evite este tipo de errores.

Cuestiones relacionadas