martes, 21 de diciembre de 2010

Linq Extension

Ahora mismo estoy en un proyecto donde toda la capa de base de datos usamos LINQ to SQL, pero nos encontramos que una de las partes del proyecto tiene una gestion de reports completamente aleatoria basada en Vistas de SQL creadas. Lo unico que sabemos de antemano es el nombre de la vista.


Haciendo una sentencia sql a traves de un string generado "on the fly" con el nombre de la vista a consultar, se soluciona todo, pero eso tenia que integrarse en nuestro modelo de datos LINQ.


LINQ por defecto puedes ejecutar una sql, pero le tienes que pasar una clase mapeada donde insertar los valores, cosa que yo no queria ya que las vistas son totalmente dinamicas.


Asi que buscando en internet encontre esta web donde habia un metodo extensor de linq, yo lo readapte para que ya me diera un datatable directamente asi añadirlo directamente al gridview


Este es el metodo extensor:

public static DataTable ExecuteQuery(this DataContext ctx, string query)
  {
    DataTable dt = new DataTable();
    using (DbCommand cmd = ctx.Connection.CreateCommand())
            {
             cmd.CommandText = query;
             ctx.Connection.Open();
             using (DbDataReader rdr =cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {                 
                    dt.Load(rdr);
                }
            }

   return dt;
 }

Este es el metodo con el que se le llama:

DataTable query = db.ExecuteQuery(sql);

No hay comentarios:

Publicar un comentario