No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprendiendo linq

26/35
Recursos

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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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? :

  • List.Where(condition)
  • from List where condition

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

Aprendiendo 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