es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Entity Framework con cláusula where filtrando desde una columna específica

Tengo un problema con Entity Framework 6 y no sé cómo resolverlo. Quiero leer datos de una tabla con EntityFramework. El objetivo es leer esos datos con una cláusula where que filtre los datos de una columna específica. La columna en la que quiero buscar está especificada en los parámetros del método.

Un ejemplo: tengo una tabla de personas

Nombre Apellido Dirección Correo electrónico
Conner Brian Nueva York abc@abc.com
Schwarzenegger Arnold Los Ángeles abc@abc.com

Normalmente seleccionaría datos así:

public List<persona> getData(string términoDeBúsqueda)
{
    using (var db = new myDB())
    {
      return db.Persona.Where(x => x.Nombre == términoDeBúsqueda).ToList();
    } 
}

Pero quiero ser flexible también con la columna que quiero filtrar. Algo como esto:

public getData(string columnaABuscar, string términoDeBúsqueda)
{
     using (var db = new myDB())
    {
      return db.Persona.Where(columnaABuscar == términoDeBúsqueda).ToList();
    } 
}

¿Cómo puedo hacer eso?

No quiero usar SQL simple y no puedo editar la base de datos.

Gracias por la ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esta flexibilidad en la filtración de datos de una columna específica con Entity Framework 6, puedes utilizar la biblioteca Dynamic LINQ. Esta biblioteca te permite construir consultas de forma dinámica utilizando una sintaxis de expresiones basada en cadenas en lugar de utilizar expresiones lambda como en el ejemplo anterior.

    Para utilizar la biblioteca Dynamic LINQ, debes agregar el siguiente espacio de nombres a tu código:

    using System.Linq.Dynamic;
    

    Luego, puedes modificar el método getData de la siguiente manera:

    public List<person> getData(string columnToSearch, string searchTerm)
    {
        using (var db = new myDB())
        {
            string query = $"{columnToSearch} = \"{searchTerm}\"";
            return db.Person.Where(query).ToList();
        }
    }
    

    En este método modificado, estamos construyendo dinámicamente la consulta utilizando los parámetros columnToSearch y searchTerm. La variable query contendrá una cadena que representa la expresión de filtro. Luego, pasamos esta variable al método Where del DbSet<person> de Entity Framework para recuperar los datos filtrados.

    Ten en cuenta que debes especificar el término de búsqueda entre comillas para asegurarte de que se trate como una cadena literal en la expresión de filtro.

    Con esta modificación, ahora puedes filtrar datos de cualquier columna de la tabla Person utilizando el método getData.

Comments are closed.