No tienes acceso a esta clase

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

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
17 Hrs
18 Min
44 Seg

Operador Contains

12/26
Recursos

Aportes 17

Preguntas 1

Ordenar por:

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

Utilizando Query Expression

// retornar los elementos que pertenezcan a la categoria de Python
void Challenge_5(IEnumerable<Book> books)
{
    // extension method
    //var result = books.Where(b => b.Categories.Contains("Python"));

    // query expression
    var result = from b in books where b.Categories.Contains("Python") select b;

    PrintValues(result);
}

Operador Contains

Se usa para encontrar los registros que contienen un determinado string.

//Query expression (experiment)
        return from book in booksCollection where book.Categories.Contains("Python") select book; 
```js public IEnumerable<Book> containsPython() { return from p in librosCollection where p.Categories.Contains("Python") select p; } ``` public *IEnumerable*\<Book> containsPython()    {        return from p in librosCollection where p.Categories.Contains("Python") select p;    }
El código que propone el profe es KeySensitive por lo cual no encontraría libros para "python". Para evitar la detección de mayúsculas y minúsculas se puede añadir un argumento al llamar el método Contains(), así: ```js Contains(keyword, StringComparer.CurrentCultureIgnoreCase)) ```Contains(keyword, StringComparer.CurrentCultureIgnoreCase))
 public IEnumerable<Book> LibrosPorCategoria(string method, string categoria)
    {
        if (method is "method")
        {
            return _booksCollection.Where(x => x.Categories.Contains(categoria, StringComparer.CurrentCultureIgnoreCase));
        }
        else if (method is "query")
        {
            return from b in _booksCollection
                   where b.Categories.Contains(categoria, StringComparer.CurrentCultureIgnoreCase)
                   select b;
        }
        else
        {
            return Enumerable.Empty<Book>();
        }
    }
Porque en los arrays el termino tiene que ser exacto y en las variables no? Por ejemplo, al intentar buscar con Contains("Pyt") en el titulo me retorna la lista, pero al intentarlo con el array, es decir la subcategoria con una lista, no me retorna nada.
```txt public IEnumerable<Book> CategoriesContainBook() { //Extension method return BooksCollections.Where(p => p.Categories.Contains("Python")); //Query Expression var query = from p in BooksCollections where(p.Categories.Contains("Python")) select p; return query; } ```
Si quieren poder imprimir las categorías pueden usar esta forma, les imprimira los valores del array de categorias. ```c# ImprimirValores(queries.CategoriaPython()); void ImprimirValores(IEnumerable<Book> listdelibros){ System.Console.WriteLine("{0, -60} {1, 15} {2, 11} {3, 17}\n", "Titulo", "N. Paginas", "Fecha publicacion", "Categoria"); //los valores de entre {} nos permiten decir le al sistema que queremos que se impriman de una parte hasta otra System.Console.WriteLine(new string('-', 90)); foreach (var item in listdelibros) { string categoria = string.Join(", ", item.Categories); System.Console.WriteLine("{0, -60} {1, 15} {2, 11} {3, 24} ", item.Title, item.PageCount, item.PublishedDate.ToShortDateString(), categoria); } } ```ImprimirValores(queries.CategoriaPython());         void ImprimirValores(IEnumerable\<Book> listdelibros){            System.Console.WriteLine("{0, -60} {1, 15} {2, 11} {3, 17}\n", "Titulo", "N. Paginas", "Fecha publicacion", "Categoria"); //los valores de entre {} nos permiten decir le al sistema que queremos que se impriman de una parte hasta otra            System.Console.WriteLine(new string('-', 90));            foreach (var item in listdelibros)            {                   string categoria = string.Join(", ", item.Categories);                System.Console.WriteLine("{0, -60} {1, 15} {2, 11} {3, 24} ", item.Title, item.PageCount, item.PublishedDate.ToShortDateString(), categoria);                            }        }
```js ``` ```js ```
Si quieren poder imprimir las categorías pueden usar esta forma, les imprimira los valores del array de categorias ImprimirValores(queries.CategoriaPython());         void ImprimirValores(IEnumerable\<Book> listdelibros){            System.Console.WriteLine("{0, -60} {1, 15} {2, 11} {3, 17}\n", "Titulo", "N. Paginas", "Fecha publicacion", "Categoria"); //los valores de entre {} nos permiten decir le al sistema que queremos que se impriman de una parte hasta otra            System.Console.WriteLine(new string('-', 90));            foreach (var item in listdelibros)            {                   string categoria = string.Join(", ", item.Categories);                System.Console.WriteLine("{0, -60} {1, 15} {2, 11} {3, 24} ", item.Title, item.PageCount, item.PublishedDate.ToShortDateString(), categoria);                            }        }
Mi solucion para poder buscar en mayusculas y minusculas `return _librosCollection.Where(``libro``=>``libro``.Categories.Any(``c``=>``c``.ToUpper().Contains(``cat``.ToUpper())));`
Mi solución del desafio: ```js public IEnumerable<Book> GetBooksByCategory(string category) { // Extension method return librosCollection?.Where(book => book.Categories.Contains(category)) ?? []; } ``` public IEnumerable\<Book> GetBooksByCategory(string category) { // Extension method return librosCollection?.Where(book => book.Categories.Contains(category)) ?? \[]; }
```c# //Primer desafio con metodo Contains: public IEnumerable<Book> BooksWithCategoryPython() { return CollectionBooks.Where(p => p.Categories.Contains("Python")); } ``` ```c# ``` ```js ```
```js public IEnumerable<Book> LibrosQueContienenXPalabraCategoria(string palabra) { return librosCollection.FindAll(p => p.Categories.Contains(palabra)); } ```public IEnumerable\<Book> LibrosQueContienenXPalabraCategoria(string palabra) { return librosCollection.Where(p => p.Categories.Contains(palabra)); }

Buscando en internet y con el linter de c# me dice que debo usar otros metodos en vez de All y any, estos son los que me recomendaba en .net 7:

public bool AllBooksHasStatus()
    {
        //extension method
        return CollectionBook.TrueForAll(book => book.Status != null);

        //linq query
        // return (from book in CollectionBook where book.Status != null select book).Count() == CollectionBook.Count;
    }

    public bool AnyBookHasBeenPublishByYear(int year)
    {
        //extension method
        return CollectionBook.Exists(book => book.PublishedDate.Year == year);

        //linq query
        // return (from book in CollectionBook where book.PublishedDate.Year == year select book).Any();
    }

No quememos el valor, hagamos que sea escalable nuestra función:

public IEnumerable<Book> LibrosDeCategoria(string text)
        {
            return librosCollection.Where(book => book.Categories.Contains(text));
        }

//* Libros de Python
        ImprimirValores(queries.LibrosDeCategoria("Python"));