El contenido de este modulo fueron
DictionaryTryGet
LiqQuery
Distinct
From,select, where
OrderBy,groupBy
Introducción
Todo lo que aprenderás sobre C#
Etapa 5 – POO reutilicemos nuestro código
Reutilizando nuestro Código
Herencia
Polimorfismo
Problemas del polimorfismo
Lista de Objetos polimórfica
Utilizando ToString para mejorar la depuración
Etapa 6- Ajustes y funcionalidad
Implementación de interfaces
Uso de interfaces
Creación y uso de regiones
Etapa 7 – Preparando información para nuestros reportes
Parámetros de salida
Probando funcionalidades de parámetros de salida
Sobrecargas de métodos
Listas de solo Lectura
Diccionario Polimórfico
Implementación de un diccionario
Uso de numeraciones en diccionario
Introduciendo datos en un diccionario
Recorrido de datos en diccionario
Impresión de objetos de un diccionario
Uso de la sentencia switch
Eventos
Recapitulemos
Etapa 8 – Consultas
Creación del reporteador
Extrayendo datos de un diccionario de manera segura
Aprendiendo linq
Sentencia where de linq
Divide y triunfarás
Agrupamientos en linq
Tipos anónimos en consultas linq
Segundo Reto
Etapa 9 – Creando una UI de Consola
Excepciones y cascadeo de excepciones
Sentencia finally
Reto final
Cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Primero, necesitamos asegurarnos de que los datos se carguen correctamente en nuestro diccionario de respuesta. Se decidió cambiar el nombre del diccionario a promediosAlumnos
. Este será el nombre de la lista a la que se agregarán los promedios. El diccionario de respuesta se construirá mediante la adición de esta lista, asegurándonos de usar la llave correcta, que en este caso será el nombre de la asignatura.
Para hacerlo, utilizamos el siguiente código:
Dictionary<string, List<object>> respuesta = new Dictionary<string, List<object>>();
respuesta.Add(asignaturaConEvaluacion, promediosAlumnos);
Es importante asegurarse de que el aspecto de las llaves sea un nombre representativo de las asignaturas evaluadas. Esto permite identificar correctamente los datos posteriormente.
Uno de los problemas que surge al trabajar con tipos anónimos es la dificultad de manejarlos fuera de su contexto inmediato. Un enfoque práctico es definir una nueva clase para representar el tipo de dato de manera clara y precisa.
Por ejemplo, creamos una clase llamada AlumnoPromedio
:
public class AlumnoPromedio
{
public float Promedio { get; set; }
public string AlumnoID { get; set; }
public string AlumnoNombre { get; set; }
}
Con esta clase ya no es necesario utilizar tipos anónimos, lo cual es ventajoso en un lenguaje fuertemente tipado como C#. Esto permite una manipulación más clara y segura de datos, evitando errores de tipo.
Para mejorar la estructura de datos, se recomienda cambiar de utilizar tipos anónimos a tipos claramente definidos. En el ejemplo, se modificó el código para retornar una lista de AlumnoPromedio
en lugar de una lista de objetos.
Esto no solo mejora la legibilidad y el mantenimiento del código, sino que también hace que las consultas y manipulaciones sean más seguras al saber exactamente qué datos están siendo tratados.
Además, aprenda a usar técnicas como Dictionary<TKey, TValue>
y LINQ para organizar y acceder a los datos de manera eficiente.
Durante la clase, se abordaron varias prácticas y técnicas importantes, tales como:
Distinct
, From
, Select
, Where
, GroupBy
, y OrderBy
, mostrando su aplicación práctica en casos de uso concretos.Estas habilidades no solo facilitan la creación de programas robustos, sino que también preparan a los estudiantes para adoptar prácticas más avanzadas en el desarrollo de software. Siempre se invita a seguir explorando y aprendiendo en este vasto mundo de la programación.
Aportes 14
Preguntas 3
El contenido de este modulo fueron
DictionaryTryGet
LiqQuery
Distinct
From,select, where
OrderBy,groupBy
que despistado para programar! jaja
Que no se supone que esos reportes como lo son las asignaciones, alumnos por asignacion y sus promedios deberia ser delegada a la Base de Datos, ya que como se vio en el uso de funciones Linq estas facilitan enormemente la carga de logica, y estas funciones/reportes los crearia con gran facilidad en la base de datos
La serie de Linq fue muy desordenada, se saltan muchos conceptos. Group by se explica por encima y se usa bastante, Juan Carlos es muy pro en conocimiento pero le falta organizar los ejemplos y ejercicios.
Para mí fue más fácil hacer el agrupamiento por nombre en lugar del Id, me funciona perfecto y así me evito hacer tipos anónimos en el agrupamiento y bla bla de mas xD
public Dictionary<string, Object> ExtractAverage()
{
var outAverage = new Dictionary<string, Object>();
var evalsBysubjectDic = ExtractEvaluationsBySubject();
foreach (var keyValPair in evalsBysubjectDic)
{
//agrupa en evalsGroup las evaluaciones por nombre de alumno
var dummy = from eval in keyValPair.Value
group eval by eval.studentBelong.name
into evalsGroup select new
{
name= evalsGroup.Key,
average =evalsGroup.Average(evaluation => evaluation.value)
};
//^^^ saca el promedio del grupo de evaluaciones
}
return outAverage;
}
Como asocia la funcion lambda la variable evaluacion, con las evaluaciones del alumno cunado se hace el promedio.
Linq, excelente herramienta para las consultas de datos en memoria minimizando la carga de grandes consultas a la base de datos.
😎
Interesante
Al principio cuesta entenderlo. Recomiendo ver el video más de 1 vez para entenderlo bien.
Cuando hace el select, devuelve un innumerable, y de paso lo usa para crear un tipo anónimo y average recive uno a uno esos elementos del innumerable y les saca el float
De la misma forma que uno a uno va sacando del key el unique o nombre (dependiendo a que le asignasteis la key)
este agrupamiento y los tipos anónimos son útiles cuando la BD puede que sea diferente a SQL server.
Entiendo que el objetivo de la clase era el manejo del LinQ, pero creo que se debió haber hecho un ejemplo mas y aplicado a la realidad. No creo que para sacar un campo calculado se deba crear una entidad. Debe de haber una forma mas sencilla para reportar datos calculados.
Creo que al agrupar por nombre seguimos obteniendo la misma cantidad de estudiantes por materia ya que si bien el nombre de algunos alumnos se repite son distintos por que tienen diferente id. Esto por la generacion aleatoria de alumnos. Quiza si se agrupa por nombre tendremos el resultado esperado.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?