CoreUtilerias 2025.8.19

dotnet add package CoreUtilerias --version 2025.8.19
                    
NuGet\Install-Package CoreUtilerias -Version 2025.8.19
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CoreUtilerias" Version="2025.8.19" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CoreUtilerias" Version="2025.8.19" />
                    
Directory.Packages.props
<PackageReference Include="CoreUtilerias" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CoreUtilerias --version 2025.8.19
                    
#r "nuget: CoreUtilerias, 2025.8.19"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CoreUtilerias@2025.8.19
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CoreUtilerias&version=2025.8.19
                    
Install as a Cake Addin
#tool nuget:?package=CoreUtilerias&version=2025.8.19
                    
Install as a Cake Tool

DevKit.Extensions

.NET Licencia

Extensión de utilidades para .NET que simplifica el manejo de datos, incluyendo operaciones con DataTable, DataRow, IDataReader, cifrado AES y generación de parámetros de consulta.

📦 Características Principales

  • Manejo de Datos Avanzado: Conversión entre objetos y DataTables
  • Seguridad Integrada: Cifrado AES listo para usar
  • Manipulación de Consultas: Generación de cadenas de consulta
  • Extensible: Fácil de ampliar con nuevas funcionalidades
  • Compatible: Funciona con .NET Standard 2.0+ y .NET 6.0+

📚 Documentación

🧩 DataReaderExtensions

Extensiones para IDataReader que permiten acceder a columnas por nombre de forma segura y mapear a objetos.

// Ejemplo de uso básico
using (var reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        int id = reader.GetValue<int>("Id");
        string nombre = reader.GetValue<string>("Nombre");
        DateTime fecha = reader.GetValue<DateTime>("FechaRegistro");

        // O convertir directamente a un objeto
        var usuario = reader.GetItem<Usuario>();
    }
}

🧠 JsonExtensions

Extensiones para trabajar con JSON de manera segura y conveniente.

// Cadena JSON a diccionario (nivel superior)
Dictionary<string, object> dict = jsonString.ToDictionary();

// Cadena JSON (array) a lista de diccionarios
IEnumerable<Dictionary<string, object>> rows = jsonArrayString.ToDictionaryList();

// Deserializar a tipo fuerte
var obj = jsonString.ToObject<MiTipo>();
Notas:
  • Ignora mayúsculas/minúsculas de nombres de propiedad
  • Ignora valores nulos al escribir y evita ciclos de referencia
  • Normaliza JsonElement a tipos .NET primarios cuando es posible
Métodos Disponibles:
  • GetValue<T>(string columnName) - Obtiene el valor tipado (devuelve default para DBNull)
  • GetItem<T>() - Convierte la fila actual en un objeto del tipo T

📊 DataTableExtensions

Extensión completa para trabajar con DataTable que incluye conversión, manipulación y análisis de datos.

🔄 Conversión de Datos
// Convertir lista a DataTable
List<Usuario> usuarios = ObtenerUsuarios();
DataTable tablaUsuarios = usuarios.ToDataTable();

// Convertir objeto único a DataTable
Usuario usuario = ObtenerUsuario(1);
DataTable tablaUsuario = usuario.ToDataTable();

// Convertir DataTable a lista
List<Usuario> listaUsuarios = tablaUsuarios.ToDataList<Usuario>();
🔍 Filtrado y Búsqueda
// Filtrar por columna
DataTable usuariosActivos = tablaUsuarios.FilterByColumn("Activo", true);

// Búsqueda personalizada
var resultados = tablaUsuarios.FindRows(
    row => row.Field<string>("Nombre").Contains("Juan")
);
📊 Manipulación de Columnas
// Seleccionar columnas específicas (ignora inexistentes)
var columnasSeleccionadas = tablaUsuarios.SelectColumns("Id", "Nombre", "Email");

// Convertir a lista de diccionarios
IEnumerable<Dictionary<string, object>> filas = tablaUsuarios.ToDictionary();
📈 Ordenamiento
// Ordenar por columna
DataTable ordenado = tablaUsuarios.OrderBy("Nombre");

// Orden descendente
DataTable ordenDescendente = tablaUsuarios.OrderBy("FechaRegistro", false);
📋 Validaciones
// Verificar si existe una columna
bool existeColumna = tablaUsuarios.HasColumn("Email");

// Verificar si la tabla está vacía
bool estaVacia = tablaUsuarios.IsEmpty();
🧹 Manejo de Valores Nulos
// Reemplazar nulos por valor predeterminado
tablaUsuarios.ReplaceNulls(0); // Para números

// Eliminar filas con valores nulos
DataTable sinNulos = tablaUsuarios.RemoveRowsWithNulls();
🔄 Operaciones de Conjunto
// Diferencia entre tablas
DataTable diferencia = tabla1.Except(tabla2, "Id");

// Unión de tablas
DataTable union = tabla1.Union(tabla2);
🔍 Análisis y Depuración
// Obtener estadísticas de columnas numéricas
var estadisticas = tablaUsuarios.GetColumnStatistics();

// Imprimir esquema de la tabla
string esquema = tablaUsuarios.PrintSchema();
🏷 Nombres de Tablas Temporales
// Tabla temporal local (solo visible en la sesión actual)
string nombreLocal = tablaUsuarios.GetTableNameLocal(); // "#Usuarios"

// Tabla temporal global (visible en todas las sesiones)
string nombreGlobal = tablaUsuarios.GetTableNameGlobal(); // "##Usuarios"
🧪 Validación de Tipos
// Verificar si un tipo es "simple" (string, numéricos, bool, fecha, enum, etc.)
bool esSimple = typeof(int).IsSimpleType(); // true
bool esSimple2 = typeof(Usuario).IsSimpleType(); // false

// Validar que un tipo genérico no sea primitivo/simple para conversión a DataTable
public void Procesar<T>()
{
    DataTableExtensions.GuardNotPrimitiveType<T>(); // Lanza excepción si T es primitivo/simple
    // ...
}
📤 Exportación de Datos
// Exportar a CSV
string csv = tablaUsuarios.WriteToCsv(delimiter: ";");

// Exportar a JSON (formato pretty)
string json = tablaUsuarios.WriteToJson();

🧾 DataRowExtensions

Extensiones para acceder de manera segura a los datos de una fila DataRow, manejando valores nulos y conversiones de tipos.

// Ejemplo de uso básico
DataRow fila = tablaUsuarios.Rows[0];

// Acceso seguro a los datos
int id = fila.GetValue<int>("Id");
string nombre = fila.GetValue<string>("Nombre");
DateTime? fechaNacimiento = fila.GetValue<DateTime?>("FechaNacimiento");

// Conversión directa a objeto
var usuario = fila.GetItem<Usuario>();
Métodos Disponibles:
  • GetValue<T>(string columnName) - Obtiene el valor tipado (devuelve default para DBNull)
  • GetItem<T>() - Mapea automáticamente la fila a un objeto del tipo T

🔐 SecurityAes

Utilidades estáticas de cifrado simétrico AES para proteger datos sensibles.

// Cifrar datos
string textoPlano = "Información confidencial";
string textoCifrado = SecurityAes.Encrypt(textoPlano);

// Descifrar datos
string textoDescifrado = SecurityAes.Decrypt(textoCifrado);
Características:
  • Clave interna de 32 bytes (256-bit)
  • Modo de operación: CBC
  • Relleno: PKCS7
  • IV generado aleatoriamente e incluido en el resultado (prefijo)
Consideraciones de Seguridad:
  1. La clave está embebida en código para simplicidad; en escenarios reales, considera administrar la clave externamente.
  2. Valida y controla excepciones de descifrado (texto corrupto o clave incompatible).
Manejo de Errores:
try
{
    string resultado = crypto.Decrypt(datosCifrados);
}
catch (CryptographicException ex)
{
    // Manejar error de descifrado (clave incorrecta, datos corruptos, etc.)
    _logger.LogError(ex, "Error al descifrar los datos");
    throw new SecurityException("No se pudo descifrar la información", ex);
}

🌐 QueryStringExtensions

Utilidad para proyectar objetos simples a un diccionario clave-valor para query strings.

Uso Básico:
// Crear parámetros a partir de un objeto anónimo
var filtros = new 
{ 
    Nombre = "Juan Pérez",
    Edad = 30,
    Activo = true,
    FechaNacimiento = new DateTime(1990, 5, 15)
};

// Generar diccionario clave-valor
IDictionary<string,string> qs = QueryStringExtensions.BindFrom(filtros);

// Si necesitas la cadena, constrúyela manualmente
string queryString = string.Join("&", qs.Select(kv => $"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(kv.Value)}"));
Características:
  • Tipos soportados: primitivos, string, bool, DateTime/DateTimeOffset (formato "yyyy-MM-dd")
  • Omite valores nulos
  • No soporta: arrays/colecciones, objetos anidados, exclusiones ni formatos personalizados (puedes extenderlo si lo necesitas)
Uso con HttpClient:
// Crear URL con parámetros
var baseUrl = "https://api.ejemplo.com/usuarios";
var qs = QueryStringExtensions.BindFrom(new { Pagina = 1, TamanoPagina = 10 });
var query = string.Join("&", qs.Select(kv => $"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(kv.Value)}"));
var urlCompleta = $"{baseUrl}?{query}";

// Realizar petición HTTP
using var httpClient = new HttpClient();
var respuesta = await httpClient.GetAsync(urlCompleta);
Consideraciones de Seguridad:
  • Codifica siempre con Uri.EscapeDataString
  • Evita incluir datos sensibles en query strings
  • Considera límites de longitud de URL
Pruebas Unitarias:
[Fact]
public void BindFrom_WithNullValues_ShouldSkipThem()
{
    // Arrange
    var parametros = new { Nombre = "Juan", Token = (string)null };
    
    // Act
    var resultado = QueryStringExtensions.BindFrom(parametros);
    
    // Assert
    Assert.Contains("Nombre=Juan", resultado);
    Assert.DoesNotContain("Token", resultado);
}

🚀 Cómo Contribuir

¡Agradecemos las contribuciones! Si deseas contribuir a este proyecto, sigue estos pasos:

  1. Haz un fork del repositorio
  2. Crea una rama para tu característica (git checkout -b feature/nueva-funcionalidad)
  3. Haz commit de tus cambios (git commit -am 'Añadir nueva funcionalidad')
  4. Haz push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

📋 Guía de Estilo de Código

  • Sigue las convenciones de codificación de C#
  • Incluye documentación XML en clases y métodos públicos
  • Escribe pruebas unitarias para nuevo código
  • Mantén la cobertura de código por encima del 80%
  • Actualiza la documentación cuando sea necesario

🧪 Ejecutando las Pruebas

# Ejecutar todas las pruebas
dotnet test

# Ejecutar pruebas con cobertura de código
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.

✨ Créditos

📞 Soporte

Para reportar problemas o solicitar características, por favor abre un issue en el repositorio.

📚 Recursos Adicionales


<div align="center"> <p>Hecho con ❤️ por el equipo de desarrollo</p> <p>Última actualización: Agosto 2025</p> </div>

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on CoreUtilerias:

Package Downloads
CoreDatabase

CoreDatabase es una biblioteca de extensiones y utilidades para ADO.NET y SQL Server. Proporciona métodos optimizados para la conexión, consulta y manipulación de datos en bases de datos SQL Server. Compatible con múltiples versiones de .NET (4.8, 8.0 y 9.0) y Microsoft.Data.SqlClient.

CoreControlesUsuario

CoreControlesUsuario es una biblioteca de extensiones y componentes personalizados para DevExpress WinForms. Proporciona herramientas optimizadas para el desarrollo de aplicaciones Windows Forms, incluyendo extensiones para GridControl, LookUpEdit y otros controles populares de DevExpress. Compatible con .NET 9.0 y Windows Forms.

CoreDbContext

El paquete contiene extensiones y utilerias para ADO.NET, SQL SERVER y EXCEL

CoreOracleDatabase

CoreOracleDatabase es una biblioteca de extensiones y utilidades para el acceso a Oracle Database. Proporciona métodos optimizados para la conexión, consulta y manipulación de datos en bases de datos Oracle. Compatible con múltiples versiones de .NET (6.0, 7.0, 8.0 y 9.0) y utiliza Oracle.ManagedDataAccess.Core para la conexión eficiente a Oracle Database.

CoreExcelPackage

CoreExcelPackage es una biblioteca de extensiones y utilidades para la manipulación de archivos Excel en .NET. Proporciona métodos optimizados para la lectura, escritura y procesamiento de datos en archivos Excel, incluyendo importación/exportación de datos, formateo y generación de informes. Compatible con múltiples versiones de .NET (4.8, 6.0, 7.0, 8.0 y 9.0) y utiliza ExcelDataReader para la lectura eficiente de archivos.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2025.8.19 6 8/19/2025
2025.8.13 95 8/13/2025
2025.8.10 90 8/11/2025
2025.8.7 153 8/8/2025
2025.7.24 442 7/24/2025
2025.7.23 436 7/24/2025
2025.7.21 482 7/22/2025
2025.7.18 34 7/18/2025
2025.7.17 114 7/17/2025
2025.7.13 140 7/14/2025
2025.7.8 145 7/8/2025
2025.7.2 130 7/4/2025
2025.5.25 116 5/24/2025
2025.5.24 76 5/24/2025
2025.5.23 80 5/23/2025
2025.5.14 265 5/15/2025
2025.5.8 165 5/8/2025
2025.5.5 157 5/6/2025
2025.5.4 158 5/4/2025
2025.5.1 158 5/1/2025
2025.4.30 152 4/30/2025
2025.4.29 152 4/27/2025
2025.3.22 204 3/22/2025
2025.3.8 172 3/9/2025
2025.2.16 231 2/17/2025
2025.2.1 135 2/1/2025
2025.1.30 130 1/28/2025
2025.1.7 169 1/7/2025
2024.12.2 166 12/2/2024
2024.11.30 141 12/1/2024
2024.11.16 114 11/15/2024
2024.11.15 112 11/15/2024
2024.11.14 116 11/14/2024
2024.11.12 146 11/12/2024
2024.11.6 121 11/7/2024
2024.11.1 120 11/1/2024
2024.10.23 125 10/23/2024
2024.10.9 152 10/9/2024
2024.10.6 147 10/4/2024
2024.9.5 178 9/5/2024
2024.8.14 161 8/14/2024
2024.8.13 165 8/14/2024
2024.7.24 156 7/24/2024
2024.7.13 138 7/14/2024
2023.11.30 447 12/11/2023
2023.11.25 179 11/27/2023
2023.11.15 240 11/16/2023
2023.10.29 253 10/30/2023
2023.8.20 275 8/21/2023
2023.8.14 245 8/14/2023
2023.8.9 239 8/9/2023
2023.7.11 294 7/12/2023
2023.6.18 275 6/19/2023
2023.5.20 271 5/16/2023
2023.5.14 276 5/8/2023
2023.5.6 294 4/29/2023
2023.4.28 331 4/26/2023
2023.4.16 324 4/17/2023
2023.4.3 328 4/4/2023
2023.3.251 347 3/31/2023
2023.3.25 325 3/25/2023
2023.2.26 447 2/27/2023
2023.2.18 404 2/19/2023
2023.2.11 415 2/11/2023
2023.2.7 379 2/7/2023
2023.2.3 376 2/3/2023
2023.1.30 402 1/31/2023
2023.1.20 405 1/20/2023
2023.1.19 376 1/19/2023
2023.1.12 417 1/12/2023
2023.1.11 398 1/11/2023
2023.1.8 441 1/8/2023
2023.1.7 406 1/7/2023
2023.1.5 398 1/5/2023
2022.12.23 403 12/23/2022
2022.12.22 423 12/22/2022
2022.12.20 412 12/20/2022
2022.12.19 412 12/19/2022
2022.12.18 391 12/19/2022
2022.10.29 479 10/28/2022
2022.10.28 545 10/28/2022 2022.10.28 is deprecated because it has critical bugs.
2022.10.5 478 10/6/2022
2022.1.7 452 1/7/2023 2022.1.7 is deprecated because it has critical bugs.