none
Ejecutar expresión Lambda desde un string RRS feed

  • Pregunta

  • Hola a todos

    Tengo un procedimiento que arma una función lambda en base a una serie de requerimientos propios del usuario.

    El armado lo deja en mi variable strQuery. Mi problema es que no se como poder hacer que se reconozca mi string como una expresión de ejecución lambda.

    Ejemplo:

    //Armado del Query

    strQuery="(mContexto.CAT_Proveedores
              .Where(c => c.ID_Proveedor == qIDProveedor)
              .OrderBy(c => c.NombreProveedor)
              .ThenBy(c => c.Credito)
              .ThenBy(c => c.Adeudo)
              .Select(c => new
                {
                     IDProveedor = c.ID_Proveedor,
                     NombreProveedor = c.NombreProveedor,
                     Credito = c.Credito,
     Adeudo = c.Adeudo
                }
                 )).ToList()";

    //Ejecutar ????

    var eQuery= strQuery;

    ¿Cómo se le debe de hacer para que strQuery funcione realmente como una ejecución de una expresión lambda?

    Gracias saludos.

    jueves, 29 de marzo de 2018 2:38

Todas las respuestas

  • Imagino que habrá forma de compilar eso y ejecutarlo pues el compilador existe y puede correrse bajo demanda.  Así trabaja ASP.net, compilando páginas ASPX y vistas razor cuando el archivo cambia.  En fin, eso es algo que se me escapa de mis manos, aunque estoy seguro que en Internet está por ahí cómo hacerlo.

    Yo pienso, sin embargo, que tal vez hay forma de construir eso dinámicamente pero sin necesidad de un string.  Si me muestra el árbol de decisión de cómo se construye esa consulta, tal vez pueda darle alternativas.


    Jose R. MCP
    Code Samples

    jueves, 29 de marzo de 2018 4:40
  • Revisa si te vale aplicar Linq dinámico, claro, sólo te valdrá para las expresiones. 

    Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)

    Otra forma es mediante el método SqlQuery() que permite ejecutar consultas "en duro", pero claro, consultas bajo el lenguaje t-sql que quizá te sea más simple construir que las consultas mediante Linq.

    Entity Framework Raw SQL Queries

    jueves, 29 de marzo de 2018 4:51
  • Les agradesco mucho sus respuestas y consejos. Esto te guía enormemente.

    Buscando respuestas a lo que se desea desarrollar encontré esta opción: 

    DynamicExpressions

    Se ve prometedor. Aun no lo he implantado. Alguien de ustedes ya habrá usado esto?

    Saludos.

    jueves, 29 de marzo de 2018 16:04
  • Nunca.

    Sin embargo, mi idea es más sencilla y tal vez le sirva.  Como usted habrá notado, los métodos LINQ suelen devolver el mismo tipo que reciben.  A menudo.  No siempre.

    Pero bueno, eso me da una idea a mí:

    public IEnumerable<Usuario> BuscarUsuarios(bool? activo)
    {
        //Consulta base:  Un SELECT de todos los usuarios.
        IQueryable<Usuario> consulta = contexto.Usuarios;
        if (activo.HasValue)
        {
            //Solamente queremos los usuarios activos (o inactivos).  Agregamos el WHERE.
            consulta = consulta.Where(u => u.Activo == activo.Value);
        }
        //Consulta lista.
        return consulta.ToList();
    }

    Esa sería mi idea.  No requeriría de texto, compilación u otras bibliotecas.


    Jose R. MCP
    Code Samples

    jueves, 29 de marzo de 2018 17:53
  • Gracias José por sus respuestas.

    Cómo sería el caso en particular cuando no se sabe exactamente qué es lo que buscará el usuario al momento de hacer su consulta?

    Digamos que un usuario en particular desea crear una consulta donde estén los 10 primeros clientes que más nos compran de acuerdo a un producto  determinado.

    Pero otro usuario quiere los 10 primeros clientes que más compran de una determinada zona geográfica de acuerdo a un periodo de tiempo.

    Aquí es donde intento armar la expresión o el query de manera dinámica.

    Saludos.

    jueves, 29 de marzo de 2018 18:12