No tienes acceso a esta clase

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

Operadores MinBy y MaxBy

19/26
Recursos

Aportes 9

Preguntas 1

Ordenar por:

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

posible solucion al caso de que nos devuelva un null
public Book? lowerPageNumberBook(IEnumerable<Book> books){
return books.Where(b=>b.PageCount>0).FirstOrDefault() is null? new Book(): books.Where(b=>b.PageCount>0).MinBy(b=>b.PageCount);
}

public Book? recentPublishDateBook(IEnumerable<Book> books){
    return books.MaxBy(b=>b.PublishedDate) is null? new Book(): books.MaxBy(b=>b.PublishedDate);
}

creo que se debería profundizar un poco mas y hacer consultas linq un poco mas complejas .

Operadores MinBy y MaxBy

Nos permiten obtener el objeto que cumple una condición especifica.

muy bueno el curso…

public IEnumerable<Book> GetBookMinPageCountNonZero()
    {
        return new List<Book>().Append(booksCollection.Where(p => p.PageCount > 0).MinBy(p => p.PageCount)!);
    }

    public IEnumerable<Book> GetBookMaxPublishedDate()
    {
        return new List<Book>().Append(booksCollection.MaxBy(p => p.PublishedDate)!);
    }

Retorno una lista para reutilizar la función que imprime los resultados y agrego el signo de exclamación al final para indicar que el valor de la consulta puede ser null.

Les comparto mi solución utilizando Extension Method y Query Expression 🤓 ```txt - MinBy //Extension Method return BooksCollections .Where(p => p.PageCount > 0) .MinBy(p => p.PageCount); //Query Expression var query = (from p in BooksCollections where p.PageCount > 0 select p) .MinBy(p => p.PageCount); if (query != null) Console.WriteLine($"This is the book with less pages: {query.Title} - Quantity pages: {query.PageCount}"); else Console.WriteLine("Not record found"); return query; - MaxBy //Extension Method return BooksCollections .MaxBy(P => P.PublishedDate); //Query Expression var query = (from p in BooksCollections select p).MaxBy(p => p.PublishedDate); if (query != null) Console.WriteLine($"Book recent published date: {query.Title} - Date published: {query.PublishedDate.ToShortDateString()}"); else Console.WriteLine("Not record found"); return query; ```
`Min` se usa para encontrar el valor mínimo en una secuencia de elementos, mientras que `MinBy` se usa para encontrar el elemento que tiene el valor mínimo basado en una función de selección específica. La última requiere una biblioteca adicional como MoreLINQ para ser utilizada.
```c# public Book LibroConMenosPaginasNoCero() { return librosCollection .Where(p => p.PageCount > 0) .MinBy(p => p.PageCount); } public Book LibroMasReciente() { return librosCollection .MaxBy(p => p.PublishedDate); } ```

Una buena opción es modificar la función ImprimirValores() para que pueda recibir una colección y/o un solo objeto Book. Así podremos usar la misma función para seguir imprimiendo las propiedades del Book(s) en “columnas”:


void ImprimirValores(IEnumerable<Book> listBooks, Book OrgBook)
{
    Console.WriteLine("{0,-60} {1,15} {2,15}\n", "Titulo", "N paginas", "Fecha Publicacion");
    if (listBooks != null)
    {
        foreach (Book book in listBooks)
        {
            Console.WriteLine("{0,-60} {1,15} {2,15}", book.Title, book.PageCount, book.PublishedDate.ToShortDateString());
        }

    }
    else if (OrgBook != null)
    {
        Console.WriteLine("{0,-60} {1,15} {2,15}", OrgBook.Title, OrgBook.PageCount, OrgBook.PublishedDate.ToShortDateString());
    }
}

Para usarlo solo pasamos la colección o el objeto y la otra propiedad en null:


ImprimirValores(null, queries.BookMinPages());