CriteriaExtensions
La clase CriteriaExtensions proporciona métodos de extensión que simplifican el trabajo con objetos de criterio, permitiendo la conversión de criterios a expresiones que pueden ser utilizadas en consultas LINQ. Estos métodos facilitan la creación de filtros y ordenamientos basados en criterios definidos por el usuario.
Dependencias y Requisitos Previos
Microsoft.Extensions.DependencyInjection
: Necesario para la interfazIServiceCollection
.Microsoft.Extensions.Configuration
: Necesario para la interfazIConfiguration
.Microsoft.Extensions.Options
: Necesario para la configuración de opciones.
Escenarios de uso
Este conjunto de métodos de extensión es particularmente útil en aplicaciones que:
- Trabajan con grandes cantidades de datos y necesitan filtrar o ordenar dinámicamente.
- Implementan patrones de diseño como Repositorios y Specification.
- Requieren construir expresiones lógicas basadas en cadenas de texto configuradas.
Beneficios
- Simplifica la creación de expresiones de filtro y ordenamiento.
- Mejora la legibilidad del código al encapsular la lógica compleja.
- Facilita la validación y manipulación de criterios en aplicaciones escalables.
Ejemplo Práctico
El siguiente ejemplo ilustra cómo utilizar los métodos de extensión de CriteriaExtensions para filtrar y ordenar una colección de objetos en función de criterios definidos por el usuario.
using CodeDesignPlus.Net.Criteria;using CodeDesignPlus.Net.Criteria.Extensions;using System;using System.Linq;using System.Linq.Expressions;
public class Order{ public int Id { get; set; } public decimal Total { get; set; } public DateTime DateCreated { get; set; }}
public class Program{ public static void Main() { var orders = new[] { new Order { Id = 1, Total = 100, DateCreated = DateTime.Now }, new Order { Id = 2, Total = 200, DateCreated = DateTime.Now.AddDays(-1) }, new Order { Id = 3, Total = 300, DateCreated = DateTime.Now.AddDays(-2) } };
var criteria = new MC.Criteria { Filters = "Total > 100", OrderBy = "DateCreated" };
var filterExpression = criteria.GetFilterExpression<Order>(); var sortExpression = criteria.GetSortByExpression<Order>();
var filteredOrders = orders.AsQueryable().Where(filterExpression); var sortedOrders = orders.AsQueryable().OrderBy(sortExpression);
Console.WriteLine("Filtered Orders:"); foreach (var order in filteredOrders) { Console.WriteLine($"Id: {order.Id}, Total: {order.Total}, DateCreated: {order.DateCreated}"); }
Console.WriteLine("\nSorted Orders:"); foreach (var order in sortedOrders) { Console.WriteLine($"Id: {order.Id}, Total: {order.Total}, DateCreated: {order.DateCreated}"); } }}
Métodos de extensión
CriteriaExtensions
proporciona los siguientes métodos de extensión para trabajar con objetos de criterio:
GetFilterExpression
Type: public static Expression<Func<T, bool>> GetFilterExpression<T>(this MC.Criteria criteria)
Genera una expresión de filtrado basada en los criterios especificados. Esta expresión puede ser utilizada en consultas LINQ para filtrar datos dinámicamente.
-
Parámetros
criteria
: Objeto de tipoMC.Criteria
que contiene la lógica de filtrado. No puede ser nulo.
-
Retorno
Expression<Func<T, bool>>
: Una expresión lambda que representa el filtro.
-
Excepciones
ArgumentNullException
: Se lanza si criteria es nulo.
GetSortByExpression
Type: public static Expression<Func<T, object>> GetSortByExpression<T>(this MC.Criteria criteria)
Genera una expresión de ordenamiento basada en los criterios especificados. Permite ordenar dinámicamente las consultas.
-
Parámetros
criteria
: Objeto de tipoMC.Criteria
que contiene la lógica de filtrado. No puede ser nulo.
-
Retorno
Expression<Func<T, bool>>
: Una expresión lambda que representa el filtro.
-
Excepciones
ArgumentNullException
: Se lanza si criteria es nulo.
Conclusiones
La clase CriteriaExtensions
proporciona métodos de extensión que simplifican la creación de expresiones de filtro y ordenamiento basadas en criterios. Estos métodos son útiles para aplicaciones que necesitan filtrar y ordenar datos de forma dinámica, mejorando la legibilidad y mantenibilidad del código.