En esta entrada voy a mostraros algunas de las formas que
tengo para extraer datos de una fuente de datos SQL usando ADO.Net sin usar
Entity Framework ni Linq2SQL.
Convertir un Dataset a Lista de objetos
En este caso, tenemos un antiguo repositorio que nos devuelva un dataset a partir de un SQL. Podemos usar este método para convertirlo a un Enumerable y así poder adaptarlo a nuestras clases.
La clase que devuelve un DataSet
public class DL_Datos
{
string connectionString="Persist Security Info=False;Integrated Security=TRUE;database=NorthWind;server=srvdesarrollo;Connect Timeout=60";
public DataSet DameDatos(string consulta)
{
SqlConnection conn = new SqlConnection(connectionString);
SqlDataAdapter da = new SqlDataAdapter(consulta, conn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
Nuestra clase
public class Empleado
{
public int codigo { get; set; }
public string nombre { get; set; }
public string ciudad { get; set; }
public string pais { get; set; }
};
La conversión
DL_Datos Sqldatos = new DL_Datos();
DataSet ds = Sqldatos.DameDatos("select EmployeeID, FirstName, LastName, City, Country from employees");
List<Empleado> empleados = ds.Tables[0]
.AsEnumerable()
.Select(dr => new Empleado()
{
codigo = dr.Field<int>("EmployeeID"),
nombre = dr.Field<string>("FirstName") + " " + dr.Field<string>("LastName"),
ciudad = dr.Field<string>("City"),
pais = dr.Field<string>("Country")
})
.ToList();
Convertir una consulta SQL a una lista de objetos
Otra forma de crear una lista directamente es crearnos un
método extensor del Command que nos devuelva ya la lista montada
El método extensor
public static void Fill<T>(this IDbCommand cmd, IList<T> list, Func<IDataReader, T> rowConverter)
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
list.Add(rowConverter(reader));
}
}
}
Lo utilizaremos de esta manera:
string connectionString = "Persist Security Info=False;Integrated Security=TRUE;database=NorthWind;server=srvdesarrollo;Connect Timeout=60";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand comm = new SqlCommand("select EmployeeID, FirstName, LastName, City, Country from employees", conn);
List<Empleado> empleados = new List<Empleado>();
comm.Fill(empleados, r => new Empleado()
{
codigo = r.GetInt32(r.GetOrdinal("EmployeeID")),
nombre = r.GetString(r.GetOrdinal("FirstName")) + " " + r.GetString(r.GetOrdinal("LastName")),
ciudad = r.GetString(r.GetOrdinal("City")),
pais = r.GetString(r.GetOrdinal("Country"))
});
conn.Close();
}
Convertir un DataSet a un Dictionary
DL_Datos Sqldatos = new DL_Datos();
DataSet ds = Sqldatos.DameDatos("select regionID, regionDescription from Region");
Dictionary<int, string> dict = ds.Tables[0]
.AsEnumerable()
.ToDictionary(
x => x.Field<int>("regionID"),
x => x.Field<string>("regionDescription")
);
Saludos.