No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Operadores Sum y Aggregate

20/26
Recursos

Aportes 14

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Les comparto dos de las formas que considero

y como lo utilizo

El resultado es el mismo en ambos casos

Para entenderlo m谩s f谩cilmente:

Aggregate( valorInicialDelAcumulador, (Acumulador, Elemento), Funcion ); 

Definici贸n:
Aplica una funci贸n de acumulador a una secuencia. El valor de inicializaci贸n especificado se utiliza como valor inicial del acumulador y la funci贸n especificada se utiliza para seleccionar el valor resultante.
https://learn.microsoft.com/es-es/dotnet/api/system.linq.enumerable.aggregate?view=net-7.0

Operador Aggregate

Se usa para realizar la acumulaci贸n de alg煤n dato dentro de una variable y retornar este valor acumulado.

Pasando el a帽o como par谩metro:

public string LibrosDespuesDeAnioConcatedos(int anio)
        {
            return librosCollection
                .Where(book => book.PublishedDate.Year > anio)
                .Aggregate("", (TitulosLibros, next) =>
                    {
                        if(TitulosLibros != string.Empty)
                        {
                            TitulosLibros += " - " + next.Title;
                        }
                        else
                        {
                            TitulosLibros += next.Title;
                        }
                        return TitulosLibros;
                    }
                );
        }

//* Libros publicados despu茅s del 2015
        Console.WriteLine($"Libros publicados despu茅s del 2015: {queries.LibrosDespuesDeAnioConcatedos(2015)}");
Es importante tener en cuenta que Aggregate puede usarse para realizar una variedad de operaciones de agregaci贸n, no solo sumas. Puedes definir cualquier l贸gica de agregaci贸n que necesites, lo que lo hace muy flexible para aplicaciones diversas.
En resumen, `Sum()` es una funci贸n 煤til en LINQ que permite calcular la suma de los valores en una secuencia, ya sea directamente en la secuencia o aplicando una proyecci贸n para obtener los valores relevantes antes de calcular la suma.
```js public string TituloLibrosFechaPublicacionpost2015() { return librosCollection .Where(p => p.PublishedDate.Year > 2015) .Aggregate("", (result, book) => result + book.Title + ", "); } ```
```c# public int SumaPaginasConRango(int start = 0, int end = 500) { return librosCollection .Where(p => p.PageCount >= start && p.PageCount <= end) .Sum(p => p.PageCount); } public string TitulosDeLibrosDespuesDel2015Concatenados() { return librosCollection .Where(p => p.PublishedDate.Year > 2015) .Aggregate("", (TitulosLibros, next) => { if (TitulosLibros != string.Empty) TitulosLibros += " - " + next.Title; else TitulosLibros = next.Title; return TitulosLibros; }); } ```

Asi me qued贸 el primer ejercicio de suma de p谩ginas con Aggregate

public int GetSumOfPagesBetween0and500WithAggregate(){
        return booksCollection
        .Where(p => p.PageCount >0 &&p.PageCount<=500)
        .Aggregate(0,(book,nextBook) =>{
            book += nextBook.PageCount;
            return book;
        });
    }
public int SumaTotalPaginasLibros()
    {
        //---->> Extension Method <<------
       // return librosCollection.Where(su => su.PageCount>0).Sum(sum => sum.PageCount);


        //---->> Extension Query <<------
       int suma = (from su 
                   in librosCollection 
                   where su.PageCount>0 
                   select su).Sum(x => x.PageCount);

      return suma;
    }

Soluci贸n sin 鈥渋f鈥:

Les comparto c贸mo se resolver铆a el primer reto con el comando Aggregate:

public int SumaDeTodasLasPaginasLibrosEntre0y500()
    {
        return librosCollection.Where(p => p.PageCount >= 0 && p.PageCount <= 500)
        .Aggregate(0, (ValorSumado, next) => 
        {
            if(ValorSumado > 0) ValorSumado += next.PageCount;
            else ValorSumado += next.PageCount;
            return ValorSumado;
        });
    }

public int SumaCantidadPaginas(){
return libros.Where(p=>p.PageCount>=0 && p.PageCount<=500).Sum(p=>p.PageCount);
}

Una version un ppoco mas reducida del codigo
return books.Where(p=>p.PublishedDate.Year> 2015).Aggregate("",(booksTitle, next)=>{
return booksTitle.Equals(string.Empty)?booksTitle +=next.Title :booksTitle+=" - "+next.Title;