c# - metodo - La expresión no puede contener expresiones lambda
linq lambda c# (2)
He buscado el objeto List<>
como a continuación (con .Include()
):
List<vDetail> entityvDetails =
context.vDetails
.Include("payInstallment.appsDetail")
.Include("payInstallment.appsDetail.application")
.Include("payInstallment.appsDetail.purposes")
.Where(e => e.vch_id == 123).ToList();
Y luego, en algún lugar del código que venía intenté filtrar el registro de la entidad como se muestra a continuación:
foreach (vDetail item in lstVDetails)
{
...
int purposeId = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault().payInstallment.appsDetail.purposes.prp_id;
...
}
Código compilando perfecto. Sin embargo, el tiempo de ejecución vuelve al siguiente error (aunque todas las navegaciones están incluidas):
Object reference not set to an instance of an object.
Así que me puse a depurar usando la ventana del reloj. Ahora, al analizar la declaración siguiente en la ventana de observación:
entityVoucherDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault()
la ventana de observación generada después del error:
Expression no puede contener expresiones lambda.
Por favor, si alguien puede decirme ¿cuál podría ser el motivo?
Aún no se admite la evaluación de las expresiones Lambda en el depurador (ventana de visualización).
Hay una solicitud de función abierta para él.
Para depurar su problema, debe asignar el resultado de la expresión lambda a una variable dedicada y usarlo en las siguientes declaraciones.
var entity = entityvDetails.Where(e => e.sad_id == item.sad_id).FirstOrDefault();
Actualización 08/2014: Microsoft publicó una actualización de la solicitud de función anunciando que comenzaron a trabajar en ella:
Así que aquí es donde nos encontramos.
- 1) Queremos que esto funcione tanto como tú. No está bajo revisión, está en progreso.
- 2) Descubrimos cómo hacerlo funcionar; simplemente requiere reescribir todo .
- 3) Estamos reescribiendo todo.
- 4) Reescribir todo lleva mucho tiempo y muchas pruebas.
Actualización 11/2014: Microsoft finalmente lo implementó con algunas limitaciones en VS2015. Leer aquí.
Si aún necesita usar Visual Studio 2010 o 2013, puede usar expresiones lambda en la consola del administrador de paquetes. Para más detalles, consulte mi publicación SO aquí:
¿Por qué no es posible evaluar lambdas en la ventana inmediata?
Esta es la fuente original