Cargar dinámicamente tablas desde Entity Framework con el nombre de las tablas como cadena de texto
Digamos que tengo una lista de cadenas que representan el nombre de las clases generadas con Entity Framework desde SQL Server:
public static List<string> tableList = new List<string>
{
"aaa",
"bbb",
"ccc",
"ddd",
"eee"
};
Y quiero cargar datos de entidades:
DateTime fromDate = DateTime.MinValue;
DateTime toDate = DateTime.MaxValue;
using (var ctx = new MyEntities())
{
IList<aaa> aa = ctx.aaa
.Where(a => a.date_added >= fromDate &&
a.date_added <= toDate)
.ToList();
}
Pero tendré que hacer esto con 20 o más tablas.
¿Hay alguna manera de hacerlo de forma dinámica? Por ejemplo:
Result res = new Result();
List<result> r = new List<result>();
foreach (string table in tableList)
{
using (var ctx = new MyEntities())
{
IList<table> aa = ctx.table
.Where(a => a.date_added >= fromDate &&
a.date_added <= toDate)
.ToList();
res.quantity = aa.Count();
res.title = table;
}
r.Add(res);
}
Todas las tablas necesarias tienen la columna date_added
.
PD: Solo necesito contar cuántas filas hay en cada tabla para un período definido. Por ejemplo, en las tablas cliente, cliente, empleado: cuántos se registraron desde 2020 hasta 2021. Y mostraré el resultado:
json
{
"title": "Cliente",
"quantity": 19,
"from_date": "fecha_inicial",
"to_date": "fecha_final"
},
{
"title": "Cliente",
"quantity": 123,
"from_date": "fecha_inicial",
"to_date": "fecha_final"
},
{
"title": "Empleado",
"quantity": 31,
"from_date": "fecha_inicial",
"to_date": "fecha_final"
}
davy.ai
Sí, puedes utilizar la reflexión para lograr esto de forma dinámica. Aquí tienes un ejemplo de cómo puedes modificar tu código para obtener el resultado deseado:
Explicación:
Result
para almacenar la cantidad y el título de cada tabla.Type
de la clase entidad correspondiente al nombre de tabla actual. Construimos el nombre de tipo completo de la clase entidad concatenando el espacio de nombres de la claseMyEntities
y el nombre de la tabla.date_added
antes de continuar.Set
y el métodoWhere
que toma el rango de fechas. También utilizamos la reflexión para crear unaList
del tipo de entidad actual utilizando la claseActivator
.Load
del objeto de consulta generado dinámicamente para llenar la listaentities
con los resultados coincidentes. Luego, actualizamos el objetoResult
con la cantidad y el título, y lo agregamos a la lista de resultadosr
.Nota: La clase
Result
no se proporciona en la pregunta, por lo que debe ser definida de la siguiente manera:¡Espero que esto te sea útil!