Dejo un ejemplo con linq lamdba
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
Juan Carlos Ruiz
Vamos a crear un método que nos devuelva una lista de todas las asignaturas que tenemos en el diccionario, para ello dentro del método llamaremos a GetListaEvaluaciones y haciendo uso de Linq obtendremos las distintas asignaturas que existen.
Linq o Language Integrated Query, tiene una sintaxis similar a SQL, pero con la ventaja de que podemos escribirlo directo en nuestro código C# sobre alguna colección. En este caso para recorrer la lista de evaluaciones y que nos retorne las asignaturas debemos escribir:
from ev in listaEvaluaciones select ev.Asignatura
El problema con ese código es que nos va a regresar todas las asignaturas contenidas en la lista de evaluaciones, aunque se encuentren repetidas. Para solucionar esto simplemente hacemos uso de la función Distinct de Linq, la cual va a eliminar los elementos duplicados.
Aportes 17
Preguntas 1
Dejo un ejemplo con linq lamdba
A esta altura de clase ya ni copio el código, solo atiendo
Cual es la diferencia de Linq entre hacer lo siguiente? :
Minuto 1:20 también podemos hacer esa condicional más corta:
// manera segura de buscar un dato
return (_diccionario.TryGetValue(
ValuesOfKeyDiccionario.Evaluacion,
out IEnumerable<EscuelaBase> lista))
// retornando una lista con todas las evalauciones
? lista.ToList().Cast<Evaluacion>()
// otherwise: retornando una lista vacia
: new List<Evaluacion>();
Linq o Language Integrated Query, tiene una sintaxis similar a SQL, pero con la ventaja de que podemos escribirlo directo en nuestro código C# sobre alguna colección. En este caso para recorrer la lista de evaluaciones y que nos retorne las asignaturas debemos escribir:
from ev in listaEvaluaciones select ev.Asignatura
Codigo no fuenciona en VS Enterprise
Indagando un poco por la red, intente implementar el comparer con la interfaz IEqualityComparer, la cual permite hacer un distinct de una propiedad en especÃfico de la entidad. En el siguiente url podrán encontrar como definir la Clase PropertyComparer con datos genéricos, y con el nombre de la propiedad como parámetro en el constructor.
Les muestro como es que quedó mi código para obtener la lista de asignaturas:
public IEnumerable<Asignatura> obtenerListaAsignaturas() {
var listEvaluaciones = obtenerListaEvaluaciones();
return (from ev in listEvaluaciones
select ev.Asignatura).Distinct(new PropertyComparer<Asignatura>("Nombre"));
}
De esta forma es posible obtener las listas de las asignaturas como objeto Asignatura como se muestra en la siguiente imagen:
El problema con ese código es que nos va a regresar todas las asignaturas contenidas en la lista de evaluaciones, aunque se encuentren repetidas. Para solucionar esto simplemente hacemos uso de la función Distinct de Linq, la cual va a eliminar los elementos duplicados.
Ejemplo de codigo para el proceso
< public void checkList()
{
List<Estudiantes> datos = new List<Estudiantes>();
Estudiantes estudiantes = new Estudiantes();
estudiantes.nombre = "Miguel";
estudiantes.apellido = "Gonzalez";
datos.Add(estudiantes);
estudiantes = new Estudiantes();
estudiantes.nombre = "Sofia";
estudiantes.apellido = "Vergara";
datos.Add(estudiantes);
IEnumerable<Estudiantes> studentQuery =
from student in datos
where student.apellido[0] > 90
select student;
}
>
var listaEvaluaciones = GetListaEvaluaciones();
//ejemplo LinQ
// 1. declarar un alias para manipular propiedades - 'evaluacion' --> from evaluacion
// 2. establecer origen de datos - listaEvaluaciones --> in listaEvaluaciones
// 3. indicar condiciones/filtros de la consulta --> where evaluacion.Nota>=3.0
// 4. indicar propÃedades que quiere incluir en el resultado --> select evaluacion.Asignatura
// *distinct --> eliminar resultados repetidos
//consulta asignaturas con evaluaciones aprobadas
return (from Evaluacion evaluacion in listaEvaluaciones
//where evaluacion.Nota>=3.0
select evaluacion.Asignatura.Nombre).Distinct();```
Linq tiene una sintaxis parecida a SQL
La respuesta a lo de Comparable
Implementar en la clase Asignatura la interfase IEqualityComparer<Asignatura>
public bool Equals(Asignatura x, Asignatura y)
{
return x.Nombre==y.Nombre;
}
public int GetHashCode(Asignatura obj)
{
return 0;
}
Luego ponemos el comparador dentro de Distinct
return (from Evaluación ev in listaEvaluaciones
select ev.Asignatura).Distinct(new Asignatura());
🤯
Muy interesante Linq
Vamos a crear un método que nos devuelva una lista de todas las asignaturas que tenemos en el diccionario, para ello dentro del método llamaremos a GetListaEvaluaciones y haciendo uso de Linq obtendremos las distintas asignaturas que existen.
ese groupBy es medio raro.
me pasa que la lista me arroja 0 en ambas situaciones y no se el porque
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?