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
You don't have access to this class
Keep learning! Join and start boosting your career
We are going to create a method that returns a list of all the subjects that we have in the dictionary, for it inside the method we will call GetListaEvaluaciones and making use of Linq we will obtain the different subjects that exist.
Linq or Language Integrated Query, has a syntax similar to SQL, but with the advantage that we can write it directly in our C# code on some collection. In this case to go through the list of evaluations and to return the subjects we must write:
from ev in listaEvaluaciones select ev.Asignatura
The problem with this code is that it will return all the subjects contained in the list of evaluations, even if they are repeated. To solve this we simply make use of the function Distinct of Linq, which will eliminate the duplicated elements.
Contributions 17
Questions 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
Want to see more contributions, questions and answers from the community?