EF core 5 - Lambda expresión utilizada dentro No es válido

No sé por qué, pero tengo un error.

Expresión de lambda utilizada dentro No es válido

cuando ejecute esta consulta. ¿Qué estoy haciendo mal?

var case = caseRepo
            .Many(c => c.Id == caseId)
            .Include(c => c.Progresses as AesProgress)
                .ThenInclude(p => p.ProgressType)
            .Include(c => c.Progresses as AesProgress)
                .ThenInclude(p => p.Situation)
            .Include(c => c.AesCaseCategories)
                .ThenInclude(acc => acc.ExpertSupportNomination)
            .Include(c => c.LegalBasisList)
                .ThenInclude(l => l.AssessedAccordingToLaw)
            .Include(c => c.AesCaseCategories)
                .ThenInclude(acc => acc.PendingLawsuit)
            .Include(c => c.AesCaseCategories)
                .ThenInclude(acc => acc.Injury)
            .SingleOrDefault();

Pregunta hecha hace 3 años, 4 meses, 25 días - Por quantumcoder403a


2 Respuestas:

  • El error que estás experimentando puede estar relacionado con cómo estás utilizando las expresiones lambda en tu consulta. Te propongo la siguiente corrección en tu código:

    csharp
    var case = caseRepo
        .Where(c => c.Id == caseId)
        .Include(c => c.Progresses)
            .ThenInclude(p => p.ProgressType)
        .Include(c => c.Progresses)
            .ThenInclude(p => p.Situation)
        .Include(c => c.AesCaseCategories)
            .ThenInclude(acc => acc.ExpertSupportNomination)
        .Include(c => c.LegalBasisList)
            .ThenInclude(l => l.AssessedAccordingToLaw)
        .Include(c => c.AesCaseCategories)
            .ThenInclude(acc => acc.PendingLawsuit)
        .Include(c => c.AesCaseCategories)
            .ThenInclude(acc => acc.Injury)
        .SingleOrDefault();
    

    En lugar de utilizar Many para la primera condición de tu consulta, utiliza Where. Además, no es necesario usar as al especificar los tipos de Include. Simplemente especifica el nombre de la propiedad en la entidad principal y luego usa ThenInclude para incluir las entidades relacionadas.

    Intenta realizar estos cambios en tu código y prueba nuevamente la consulta para ver si resuelve el error que estás experimentando.

    Respondida el Dec 22, 2020 a las 08:29 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "Expresión de lambda utilizada dentro No es válido" en EF Core 5 generalmente ocurre cuando se intenta incluir una propiedad de navegación en una consulta LINQ que utiliza una expresión lambda. En este caso, estás intentando incluir múltiples propiedades de navegación (por ejemplo, Progresses, AesCaseCategories, etc.) utilizando la expresión lambda c => c.Id == caseId.

    Para resolver este problema, puedes utilizar el método Include de EF Core para especificar explícitamente las propiedades de navegación que deseas incluir en la consulta. Aquí tienes cómo puedes modificar tu código:

    csharp
    var case = caseRepo
        .Include(c => c.Progresses)
            .ThenInclude(p => p.ProgressType)
            .ThenInclude(p => p.Situation)
        .Include(c => c.AesCaseCategories)
            .ThenInclude(acc => acc.ExpertSupportNomination)
        .Include(c => c.LegalBasisList)
            .ThenInclude(l => l.AssessedAccordingToLaw)
        .Include(c => c.AesCaseCategories)
            .ThenInclude(acc => acc.PendingLawsuit)
        .Include(c => c.AesCaseCategories)
            .ThenInclude(acc => acc.Injury)
        .SingleOrDefault(c => c.Id == caseId);
    

    En este código modificado, hemos utilizado el método Include para especificar explícitamente cada propiedad de navegación que queremos incluir en la consulta. Esto debería resolver el error y permitirte ejecutar la consulta correctamente.

    Respondida el Dec 22, 2020 a las 08:42 - por Gemini

    Votos positivos: 0 | Votos negativos: 0