none
LINQ - nombres de columnas parametrizados. RRS feed

  • Pregunta

  • Hola, no estoy seguro de si es posible, porque he buscado bastante sin mucho éxito.

    Me gustaría saber si hay alguna forma de realizar una función que realice consultas sobre un conjunto de columnas que le pasemos por parámetros, es decir:

    IQueryable<Tabla1> ObtenerColumnas(params string [] columnas)
    {
                 IQueryable<Tabla1> query = db.Tabla1;

                foreach (string columna in columnas)
                {
                    query = query.Where(p => p.[columna].Contains( loquesea ));
                }
                return query;
    }

    No se si me explico bien, lo que está en rojo no puede hacerse tal cual, pero existe alguna manera de crear consultas pasándole las columnas en tiempo de ejecución?
    martes, 2 de septiembre de 2008 11:32

Respuestas

Todas las respuestas

  • :-)

    Hola,

     

    Si. Es posible pero debes utilizar dynamic LINQ para crear dinámicamente un string que puedas utilizar en el Where.

     

     

    Dale un vistazo a este post de Scott:

    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

     

    Saludos,

     

     

    miércoles, 3 de septiembre de 2008 7:18
  • ¿Se podría parametrizar también el nombre de la tabla?

    Así se conseguiría una generalización total.

    Dim query = Northwind.["TablaPorParametro"].Where........
    miércoles, 3 de septiembre de 2008 10:33
  • :-)

    Hola de nuevo Pablo,

     

    Uhm... pues con dynamic LINQ desgraciadamente no es posible. Pero se me ocurre que se podría hacer con LINQ to DataSets, generando dinámicamente el DataSet y luego interrogándolo con LINQ.

     

    Un saludo,

     

    miércoles, 3 de septiembre de 2008 14:10
  • Todos estos ejemplos son sobre SQL pero como hago esto mismo pero con una List(Of T), esto que pogo aqui funciona, pero colo lo hago según lo pone uste usando un string.

    Private Sub Filto(ByVal TextoBuscar As String, ByVal TipoBusqueda As Integer) Dim lista As List(Of PacienteRedEntidad) = DirectCast(dgvPacientes.DataSource, List(Of PacienteRedEntidad)) Select Case TipoBusqueda Case 1 Dim result As List(Of PacienteRedEntidad) = (From item In lista _ Where (item.NombrePaciente.Contains(TextoBuscar)) _ Select item).ToList() dgvPacientes.DataSource = result Case 2 Dim result As List(Of PacienteRedEntidad) = (From item In lista _ Where (item.NombrePaciente.StartsWith(TextoBuscar)) _ Select item).ToList() dgvPacientes.DataSource = result Case 3 Dim result As List(Of PacienteRedEntidad) = (From item In lista _ Where (item.NombrePaciente = TextoBuscar) _ Select item).ToList() dgvPacientes.DataSource = result End Select

    End Function

    viernes, 19 de octubre de 2012 20:33