CoreUtilerias 2025.7.21

dotnet add package CoreUtilerias --version 2025.7.21
                    
NuGet\Install-Package CoreUtilerias -Version 2025.7.21
                    
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.7.21" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CoreUtilerias" Version="2025.7.21" />
                    
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.7.21
                    
#r "nuget: CoreUtilerias, 2025.7.21"
                    
#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.7.21
                    
#: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.7.21
                    
Install as a Cake Addin
#tool nuget:?package=CoreUtilerias&version=2025.7.21
                    
Install as a Cake Tool

DotNet.ExtensionsToolkit

.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 y convertirlas de forma segura.

// Ejemplo de uso básico
using (var reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        int id = reader.GetInt32("Id");
        string nombre = reader.GetString("Nombre");
        DateTime fecha = reader.GetDate("FechaRegistro");
        
        // O convertir directamente a un objeto
        var usuario = reader.GetItem<Usuario>();
    }
}
Métodos Disponibles:
  • GetInt32(string columnName)
  • GetString(string columnName)
  • GetDecimal(string columnName)
  • GetDate(string columnName)
  • GetGuid(string columnName)
  • GetBoolean(string columnName)
  • GetDouble(string columnName)
  • GetBytes(string columnName)
  • 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
// Añadir columna si no existe
tablaUsuarios.AddColumnIfNotExist("FechaActualizacion", typeof(DateTime));

// Seleccionar columnas específicas
var columnasSeleccionadas = tablaUsuarios.SelectColumns("Id", "Nombre", "Email");

// Convertir a diccionario
var diccionario = 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 primitivo
bool esPrimitivo = typeof(int).IsPrimitive(); // true
bool esPrimitivo2 = typeof(Usuario).IsPrimitive(); // false

// Validar que un tipo no sea primitivo (útil para genéricos)
public void Procesar<T>()
{
    typeof(T).GuardIsPrimitive(); // Lanza excepción si T es primitivo
    // ...
}
📤 Exportación de Datos
// Exportar a CSV
string csv = tablaUsuarios.ToCsv(delimiter: ";");

// Exportar a JSON (usando System.Text.Json)
string json = JsonSerializer.Serialize(tablaUsuarios);

🧾 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.GetInt32("Id");
string nombre = fila.GetString("Nombre");
DateTime? fechaNacimiento = fila.GetDate("FechaNacimiento"); // Devuelve DateTime?

// Conversión directa a objeto
var usuario = fila.GetItem<Usuario>();
Métodos Disponibles:
  • GetInt32(string columnName) - Obtiene un entero de 32 bits
  • GetString(string columnName) - Obtiene una cadena (maneja DBNull)
  • GetDecimal(string columnName) - Obtiene un valor decimal
  • GetDate(string columnName) - Obtiene un DateTime? (nullable)
  • GetGuid(string columnName) - Obtiene un Guid
  • GetBoolean(string columnName) - Obtiene un valor booleano
  • GetDouble(string columnName) - Obtiene un número de punto flotante
  • GetBytes(string columnName) - Obtiene un array de bytes
  • GetItem<T>() - Mapea automáticamente la fila a un objeto del tipo T
Manejo de Valores Nulos:
// Valor predeterminado personalizado
int edad = fila.GetInt32("Edad", -1); // Retorna -1 si es nulo

// Valor predeterminado genérico
DateTime fecha = fila.GetDate("FechaRegistro") ?? DateTime.MinValue;

🔐 SecurityAes

Implementación de cifrado simétrico AES (Advanced Encryption Standard) para proteger datos sensibles.

// Inicialización con clave personalizada
var crypto = new SecurityAes("clave-secreta-32-caracteres");

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

// Descifrar datos
string textoDescifrado = crypto.Decrypt(textoCifrado);
Características:
  • Tamaños de clave soportados: 128, 192 y 256 bits
  • Modo de operación: CBC (Cipher Block Chaining)
  • Relleno: PKCS7
  • IV (Vector de Inicialización): Generado aleatoriamente e incluido en el resultado
Mejores Prácticas:
  1. Almacenamiento seguro de claves:

    // En producción, usa un gestor de secretos
    var keyVaultUrl = "https://tu-keyvault.vault.azure.net/";
    var secretClient = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential());
    string encryptionKey = (await secretClient.GetSecretAsync("EncryptionKey")).Value.Value;
    
  2. Rotación de claves: Implementa un sistema para rotar las claves periódicamente

  3. Validación de datos: Siempre valida los datos antes de cifrarlos/descifrarlos

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 generar cadenas de consulta (query strings) a partir de objetos, ideal para construir URLs de API.

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),
    Intereses = new[] { "programación", "música", "deportes" }
};

// Generar query string
var queryString = QueryStringExtensions.BindFrom(filtros);

// Resultado: "Nombre=Juan%20P%C3%A9rez&Edad=30&Activo=true&FechaNacimiento=1990-05-15&Intereses=programaci%C3%B3n&Intereses=m%C3%BAsica&Intereses=deportes"
Características:
  • Tipos soportados:

    • Tipos primitivos (int, string, bool, etc.)
    • DateTime (formateado como "yyyy-MM-dd")
    • Enumeraciones (usando el valor numérico)
    • Arrays y colecciones (se repite el parámetro para cada valor)
    • Objetos anidados (usando notación de puntos)
  • Personalización de formato de fecha:

    // Especificar formato personalizado
    var opciones = new QueryStringOptions 
    { 
        DateTimeFormat = "yyyy/MM/dd HH:mm:ss" 
    };
    
    var queryString = QueryStringExtensions.BindFrom(filtros, opciones);
    
  • Exclusión de propiedades:

    // Excluir propiedades específicas
    var opciones = new QueryStringOptions
    {
        ExcludeProperties = new[] { "Token", "Contraseña" }
    };
    
Uso con HttpClient:
// Crear URL con parámetros
var baseUrl = "https://api.ejemplo.com/usuarios";
var queryParams = QueryStringExtensions.BindFrom(new { Pagina = 1, TamañoPagina = 10 });
var urlCompleta = $"{baseUrl}?{queryParams}";

// Realizar petición HTTP
using var httpClient = new HttpClient();
var respuesta = await httpClient.GetAsync(urlCompleta);
Consideraciones de Seguridad:
  • Codificación URL: Todos los valores son correctamente codificados para URL
  • Datos sensibles: No incluir nunca contraseñas o tokens en query strings (usar headers HTTP en su lugar)
  • Tamaño de URL: Las URLs tienen un límite de longitud (alrededor de 2000 caracteres en la mayoría de navegadores)
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: Julio 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 (5)

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.7.21 15 7/22/2025
2025.7.18 31 7/18/2025
2025.7.17 112 7/17/2025
2025.7.13 138 7/14/2025
2025.7.8 143 7/8/2025
2025.7.2 128 7/4/2025
2025.5.25 115 5/24/2025
2025.5.24 75 5/24/2025
2025.5.23 79 5/23/2025
2025.5.14 264 5/15/2025
2025.5.8 164 5/8/2025
2025.5.5 156 5/6/2025
2025.5.4 157 5/4/2025
2025.5.1 157 5/1/2025
2025.4.30 151 4/30/2025
2025.4.29 151 4/27/2025
2025.3.22 202 3/22/2025
2025.3.8 171 3/9/2025
2025.2.16 229 2/17/2025
2025.2.1 133 2/1/2025
2025.1.30 129 1/28/2025
2025.1.7 168 1/7/2025
2024.12.2 165 12/2/2024
2024.11.30 140 12/1/2024
2024.11.16 113 11/15/2024
2024.11.15 111 11/15/2024
2024.11.14 115 11/14/2024
2024.11.12 145 11/12/2024
2024.11.6 120 11/7/2024
2024.11.1 119 11/1/2024
2024.10.23 124 10/23/2024
2024.10.9 151 10/9/2024
2024.10.6 146 10/4/2024
2024.9.5 177 9/5/2024
2024.8.14 160 8/14/2024
2024.8.13 164 8/14/2024
2024.7.24 152 7/24/2024
2024.7.13 137 7/14/2024
2023.11.30 445 12/11/2023
2023.11.25 179 11/27/2023
2023.11.15 239 11/16/2023
2023.10.29 251 10/30/2023
2023.8.20 268 8/21/2023
2023.8.14 239 8/14/2023
2023.8.9 233 8/9/2023
2023.7.11 287 7/12/2023
2023.6.18 268 6/19/2023
2023.5.20 263 5/16/2023
2023.5.14 268 5/8/2023
2023.5.6 286 4/29/2023
2023.4.28 323 4/26/2023
2023.4.16 315 4/17/2023
2023.4.3 320 4/4/2023
2023.3.251 339 3/31/2023
2023.3.25 317 3/25/2023
2023.2.26 439 2/27/2023
2023.2.18 396 2/19/2023
2023.2.11 407 2/11/2023
2023.2.7 371 2/7/2023
2023.2.3 368 2/3/2023
2023.1.30 394 1/31/2023
2023.1.20 397 1/20/2023
2023.1.19 368 1/19/2023
2023.1.12 409 1/12/2023
2023.1.11 390 1/11/2023
2023.1.8 433 1/8/2023
2023.1.7 398 1/7/2023
2023.1.5 390 1/5/2023
2022.12.23 395 12/23/2022
2022.12.22 415 12/22/2022
2022.12.20 403 12/20/2022
2022.12.19 404 12/19/2022
2022.12.18 383 12/19/2022
2022.10.29 471 10/28/2022
2022.10.28 529 10/28/2022 2022.10.28 is deprecated because it has critical bugs.
2022.10.5 471 10/6/2022
2022.1.7 436 1/7/2023 2022.1.7 is deprecated because it has critical bugs.