No tienes acceso a esta clase

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

Usando el operador Where

9/26
Recursos

Aportes 11

Preguntas 1

Ordenar por:

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

o inicia sesi贸n.

Hola, forastero si has llegado hasta aqui quiere decir que vas enserio, te regalo mis apuntes, a mi me sirvieron, a lo mejor te sierven a ti.
https://drive.google.com/file/d/1IQzfpYKqimrTeMynISSUlYAQlOzENy2d/view?usp=sharing

1. Como aporte, se modific贸 un poco el c贸digo que tra铆a de clase anterior, agregue el m茅todo de GetCustomFilter utilizando el delegado como par谩metro Func<Book, bool> para poder filtrar a conveniencia desde donde se invoque una instancia de esta clase LinqQueries, como se aprecia en la imagen 2. Combinando esta forma con delegados y Linq se saca un poder incre铆ble al momento de por ejemplo filtrar:

LinqQueries queries = new LinqQueries();
Func<Book, bool> filtro = x => x.PublishedDate.Year >= 2000 && x.PageCount > 600;
var filtrado = queries.GetCustomFilter(filtro);

_Y ah铆 mismo se puede concatenar m谩s condiciones dando un dinamismo en el filtrado que de otra manera es mas complicado. _

2. Tambi茅n se modific贸 la clase de Book.cs sobrescribiendo el m茅todo ToString() para devolver el string parseado que estamos mostrando por consola para ver el Titulo, p谩ginas y fecha publicaci贸n y el signo de pregunta al final del tipo de cada propiedad es para dejar la propiedad de tipo Nullable o que acepta valores null. En la secci贸n o archivo de Program.cs solo de crea la instancia nueva, se crea la variable filtro que tiene la definici贸n de la expresi贸n de nuestro filtro (a帽o publicaci贸n >= 2000 y adem谩s que las p谩ginas sean mayor a 600) Lo importante de esta parte es que podemos desde la instancia aplicar el filtro que se quiera, y no depender de la clase con la implementacion.

_3. Aqui el resultado _

4. y como ya es costumbre la imagen completa

Reto 2: Filtro paginas > 250 y titulo contiene 鈥渋n Action鈥

public IEnumerable<Book> LibrosMasDe250Paginas(string method, int pages, string title)
    {
        if (method is "method")
        {
            return _booksCollection.Where(x => x.PageCount > pages && x.Title.Contains(title));
        }
        else if (method is "query")
        {
            return from b in _booksCollection
                   where b.PageCount > pages && b.Title.Contains(title)
                   select b;
        }
        else
        {
            return Enumerable.Empty<Book>();
        }
    }

Asi quedo mi Query

public IEnumerable<Book> LibrosDespues2000 => libros.Where(libro => libro.PublishedDate.Year > 2000);

Documentaci贸n oficial de LINQ

en Microsoft

Si hicieron colocaron como nullable las propiedades string de libros les aparecer谩 una advertencia en las query. Para solucionarlo us茅 el operador (??) de esta manera:

public IEnumerable<Book> BooksInActionAndMoreThan250Pages()
    {
        // Extension method
         return collectionBook.Where(book => book.PageCount > 250 && (book.Title ?? String.Empty).Contains("in Action"));

        // Query Expression
        //return from l in collectionBook where l.PageCount > 250 && (l.Title ?? String.Empty).Contains("in Action") select l;
    }
 public IEnumerable<Book> TodaLaColeccion()
        {
            // extension method
            // return this.librosCollection.OrderBy(book => book.Title);
            // query method
            return from book in this.librosCollection
                   orderby book.Title
                   select book;
        }

        public IEnumerable<Book> LibrosPublicadosDespuesDel2000()
        {
            // extension method
            // return this.librosCollection.Where(book => book.PublishedDate.Year > 2000);
            // query method
            return from book in this.librosCollection
                   where book.PublishedDate.Year > 2000
                   select book;
        }

        public IEnumerable<Book> LibrosConMasDe250Paginas()
        {
            // extension method
            // return this.librosCollection.Where(book => book.PageCount > 250 && book.Title.Contains("in Action"));
            // query method
            return from book in this.librosCollection
                   where book.PageCount > 250 && book.Title.Contains("in Action")
                   select book;
        }
// Reto 1
public IEnumerable<Book> LibrosDespuesDeCiertoAnio(string method, int year)
    {
        if (method is "method")
        {
            // Extension method
            return _booksCollection.Where(x => x.PublishedDate.Year > year).OrderByDescending(x => x.PublishedDate);
        }
        else if (method is "query")
        {
            // Query expresion
            return from b in _booksCollection
                where b.PublishedDate.Year > year
                orderby b.PublishedDate descending
                select b;
        }
        else 
        {
            return Enumerable.Empty<Book>();
        }
    }
 public List<Book> FilterBooks(int year, int pages, string textToSearch)
    {
        var filteredList = collectionBooks.ToList().AsQueryable();

        if (year > 0)
        {
            filteredList = filteredList.Where(book => book.publishedDate.Year > year);
        }

        if (pages > 0)
        {
            filteredList = filteredList.Where(book => book.pageCount > pages);
        }

        if (textToSearch != "")
        {
            filteredList = filteredList.Where(book => book.title.Contains(textToSearch));
        }

        return filteredList.ToList();
    }```

Cordial saludo Miguel. Ser铆a muy bueno que en los pr贸ximos videos que hagas uses par谩metros al crear los m茅todos. Muy bueno el curso. Gracias