Construcción de reportes con LINQ en C#
Clase 26 de 35 • Curso de C# con .Net Core 2.1
Contenido del curso
Etapa 5 – POO reutilicemos nuestro código
- 2

Herencia para reutilizar código C#
10:30 min - 3

Herencia y Polimorfismo en Programación Orientada a Objetos
11:42 min - 4

Polimorfismo en Programación Orientada a Objetos
13:17 min - 5

Casting en C#: cuándo funciona y cuándo falla
07:09 min - 6

Conversiones seguras en C# con is y as
12:44 min - 7

Sobrescribir ToString para depuración en C#
08:15 min
Etapa 6- Ajustes y funcionalidad
Etapa 7 – Preparando información para nuestros reportes
- 11

Manejo Avanzado de Métodos y Parámetros en Programación
15:43 min - 12

Manejo de Parámetros de Salida en Visual Studio Code
04:38 min - 13

Sobrecarga de Métodos para Parámetros de Salida Opcionales
05:51 min - 14

Optimización de Listas: Buenas Prácticas en C#
04:16 min - 15

Dictionary: cómo funciona en C#
11:14 min - 16

Diccionarios con polimorfismo en C#
10:48 min - 17

Uso de Constantes y Enumeraciones para Optimizar Diccionarios en C#
11:33 min - 18

Foreach anidado para diccionarios en C#
13:47 min - 19

Depuración de diccionarios en C#
09:37 min - 20

Parámetro opcional para controlar impresión en C#
11:47 min - 21

Cómo usar switch en lugar de if/else
14:30 min - 22

Números aleatorios y eventos en C#
12:52 min - 23

Diccionarios y Refactoring en Programación Básica
02:13 min
Etapa 8 – Consultas
- 24

Cómo crear un reporteador en C sharp
11:42 min - 25

Generación segura de reportes en sistemas de información
10:21 min - 26

Construcción de reportes con LINQ en C#
Viendo ahora - 27

Diccionario con evaluaciones por asignatura
08:32 min - 28

Tipos anónimos en LINQ para reportes complejos
10:52 min - 29

Cálculo del Promedio de Notas Agrupadas por Alumno y Asignatura
10:46 min - 30

Creación de Tipos de Datos Personalizados en Programación Avanzada
12:05 min - 31

Generación de Reportes con LINQ en C#
02:09 min
Etapa 9 – Creando una UI de Consola
Construir reportes robustos en C# inicia con decisiones simples que evitan errores futuros. Aquí verás cómo retornar colecciones de forma segura, aplicar consultas con LINQ y preparar un diccionario de evaluaciones por asignatura. Todo con un enfoque práctico en Visual Studio Code y validado con depuración.
¿Cómo se construye el primer reporte de evaluaciones?
La base es obtener la lista completa de evaluaciones y manejar correctamente los casos sin datos. En lugar de devolver nulo, se retorna una lista vacía: más seguro y predecible.
- Retornar lista vacía: evita comprobaciones nulas repetitivas y excepciones.
- Nombre semántico: evalList como identificador claro para la lista obtenida.
- Depuración en Visual Studio Code: se verifican objetos y su estado con el depurador, aunque tarda más que imprimir en consola.
Ejemplo ilustrativo:
// Respuesta segura cuando no hay evaluaciones
return new List<Evaluacion>();
¿Por qué retornar lista vacía y no nulo?
- Simplifica el consumo de la API interna: no hay if innecesarios.
- Contrato consistente: siempre llega una colección válida.
¿Cómo validar con depuración en Visual Studio Code?
- Ejecutar y revisar la variable evalList con el depurador.
- Confirmar que los elementos sean evaluaciones y que la cantidad coincida con lo esperado.
¿Qué habilidades se refuerzan aquí?
- Buenas prácticas de retorno en C#.
- Uso del depurador para inspección profunda de objetos.
¿Qué hace el segundo reporte con LINQ y distinct?
El objetivo es obtener las asignaturas que han sido evaluadas, evitando duplicados. Se parte de la lista de evaluaciones y se proyecta a asignaturas usando LINQ.
- Origen de datos: la lista de evaluaciones previamente obtenida.
- Proyección: seleccionar la asignatura de cada evaluación con select.
- Eliminación de duplicados: aplicar distinct para quedarnos con asignaturas únicas.
Consulta ilustrativa:
// Origen: listaEvaluaciones
var asignaturas = from ev in listaEvaluaciones
select ev.Asignatura;
// Evitar repetidos
var asignaturasUnicas = asignaturas.Distinct();
¿Cómo se define el origen de datos con from y select?
- from ev in listaEvaluaciones: establece el conjunto a consultar.
- select ev.Asignatura: proyecta solo la asignatura de cada evaluación.
¿Cómo filtrar con where y por qué es útil?
Puedes filtrar, por ejemplo, evaluaciones aprobadas con nota mayor o igual a 3.0:
var asignaturasAprobadas = from ev in listaEvaluaciones
where ev.Nota >= 3.0F
select ev.Asignatura;
- Útil para reportes específicos como “asignaturas con evaluaciones aprobadas”.
¿Cómo evitar duplicados con distinct, hash code y comparer?
- distinct elimina elementos repetidos, pero depende de cómo se comparan objetos.
- Con objetos complejos, la comparación usa su hash code por defecto.
- Si se requiere comparar por nombre, se puede proyectar a string o implementar un comparer personalizado.
Proyección a nombres para simplificar:
var nombresAsignaturasUnicas = (from ev in listaEvaluaciones
select ev.Asignatura.Nombre)
.Distinct();
Habilidades y keywords trabajadas: - LINQ (from, select, where, distinct). - Proyección a string y control de duplicados. - Conceptos de hash code, comparer y comparison.
¿Cómo preparar el diccionario de evaluaciones por asignatura?
El siguiente paso es un reporte más elaborado: mapear asignaturas a sus evaluaciones. La estructura natural es un diccionario donde la clave es la asignatura y el valor es una colección de evaluaciones.
- Interfaz de retorno: colección por asignatura como IEnumerable
. - Estructura: diccionario para agrupación clara y acceso eficiente.
- Nombre claro: get diccionario de evaluaciones por asignatura.
Esqueleto ilustrativo:
// Diccionario: asignatura -> evaluaciones
var diccionarioRespuesta = new Dictionary<string, IEnumerable<Evaluacion>>();
// ... construcción del diccionario ...
return diccionarioRespuesta;
¿Qué estructura devolver: lista o diccionario?
- Lista: sirve para enumerar todo sin agrupación.
- Diccionario: ideal para consultar por asignatura y construir reportes por clave.
¿Cómo nombrar métodos y variables para claridad?
- get lista de evaluaciones: retorno base para todos los reportes.
- get lista de asignaturas: derivado con LINQ y distinct.
- get diccionario de evaluaciones por asignatura: agrupación por clave.
¿Qué flujo recomienda el reporteador?
- Reusar la lista de evaluaciones ya funcional.
- Derivar asignaturas únicas con distinct.
- Construir el diccionario para consultas por asignatura.
¿Te gustaría ver una versión con agrupación y llenado del diccionario paso a paso? Comparte en los comentarios qué parte quieres profundizar.