Sana Sugerencia: Importante para tener en cuenta en lo de las Escuelas: Alumno que venga del curso de programación, luego C#, luego este, se encuentra con malas prácticas de programación al no usar parámetros en los métodos.
Ya existe un método que se llamaría "librosDeCategoria(string categoria)" y se enviaría "python" la primera vez y "java" la segunda. ImprimirValores(queries.librosDeCategoria("python") y luego ImprimirValores(queries.librosDeCategoria("java")
public IEnumerable<Book> BooksAbout(string BookName)
{
return bookCollection.Where(book => book.Title.Contains(BookName));
}
no veo que el curso diga "linq con clean code", hay otro curso de c# con codigo limpio y solid 🤓👌
Operadores OrderBy y OrderByDescending
Nos permiten ordenar una colección usando cualquier criterio.
¿Una pregunta, en el entorno laboral se suele utilizar VSC o VS?
Y que tan parecido es uno del otro para irme familiarizando con el entorno del IDE.
De antemano muchas gracias.
En ambiente avanzados se usa mas Visual Studio professional ofrece muy buenas herramientas para hacer debugging y mas. Para hacer proyectos mas pequeños, demos o proyectos de microservicios me gusta usar Visual studio code por que es ligero, multiplataforma y familiar para todos los dev que usan otros lenguajes como Javascript y python.
public List<Book>getByPagesOrderByDescendingQuery(IEnumerable<Book> books,int pages){
return (from b in books where b.PageCount > pages orderby b.PageCount descending select b).ToList();
}
miguel una duda, puede subordenar otro campo con linq, esto lo haciamos asi con sql
Por ejemplo Title y ademas PageCount
Select * from libroscollection co where co.PageCount>450 Order by co.Title, co.PageCount DESC
public IEnumerable<Book> LibrosdeJavaPorNombreAscendente()
{
return librosCollection.Where(co=> co.Categories.Contains("Java")).OrderBy(co=> co.PageCount).ThenBy
(co => co.Title);
}
ya contesto el profe de volada.... Por si quiero agregar mas ordenamiento...
Creo que en esta ocasión la query expression es más intuitiva...
<code>returnfrom l in _librosCollection where l.Categories.Contains("Java") orderby l.Title, l.PageCount select l;
Asi he implementado la solucion al problema de ordenamiento descendente cuando los libros tengan mas de 500 paginas:
Libros que tienen mas de 500 paginas en orden descendente:TitleN.PaginasAño de PublicacionJavaScript:TheDefinitiveGuide7066/06/2020Python and TkinterProgramming6881/01/2000GWTinAction6321/06/2007AndroidinAction,SecondEdition59214/01/2011FlexibleRails5921/01/2008OSGiinAction5766/04/2011Up to SpeedwithSwing,SecondEdition5601/10/1999BrownfieldApplicationDevelopmentin.NET55016/04/2010Pool and DBCP:Creating and UsingObjectPools5211/03/2005GrailsinAction5201/05/2009DistributedApplicationDevelopmentwithPowerBuilder6.05041/06/1998
Para reutilizar código y hacerlo mantenible, se puede separar el ordenamiento en otra función:
Donde se ve que manejo un enum, que por defecto son estáticos, así que al menos en mi caso que Rider me hace un wrapper de la función main, lo declaro fuera de la clase:
En este caso solo hay ascendente y descendente, por lo que podría ser un poco mucho de boilerplate y se podrían llamar diferentes funciones wrapper con parámetros booleanos y diferentes nombres para cada caso ascendente y descendente, pero la ventaja es que es extendible a otros casos de uso donde requiramos más opciones en los queries.
Alguien me puede aportar un ejemplo del segundo reto en Query Expresion por favor
//* Libros de Java - Ordenados por nombre descendenteImprimirValores(queries.LibrosMasDeXPaginasDescendente(450));
output:
Titulo N. Paginas Fecha publicacion
JavaScript: The Definitive Guide 706 06/06/2020
Python and Tkinter Programming 688 01/01/2000
GWT in Action 632 01/06/2007
Android in Action, Second Edition 592 14/01/2011
Flexible Rails 592 01/01/2008
OSGi in Action 576 06/04/2011
Up to Speed with Swing, Second Edition 560 01/10/1999
Brownfield Application Development in .NET 550 16/04/2010
Pool and DBCP: Creating and Using Object Pools 521 01/03/2005
Grails in Action 520 01/05/2009
Distributed Application Development with PowerBuilder 6.0 504 01/06/1998
using System.Xml.Serialization;using System.Net.Mime;// See https://aka.ms/new-console-template for more informationLinqQueries queries =newLinqQueries();//ImprimirValores(queries.TodaLaColeccion());//ImprimirValores(queries.ListaLibrosDespues2000());// LIBROS QUE TIENE MAS DE 250 PAG Y TIENE EN EL TITULO LA PALABRAS IN ACTION//ImprimirValores(queries.ListaLibrosMasd250PagConPalabrasInAction());Console.WriteLine($"{queries.TodosLibrosTienenStatus()}");Console.WriteLine("=====================================");Console.WriteLine($"{queries.TodosLibrosPublicadosAnio2005()}");Console.WriteLine("=====================================");ImprimirValores(queries.CategoriasMicrosoft());Console.WriteLine("=====================================");ImprimirValores(queries.CategoriasJava());Console.WriteLine("=====================================");ImprimirValores(queries.TodosLibrosMasd450Pag());voidImprimirValores(IEnumerable<Book> listadelibros){Console.WriteLine("{0,-60} {1, 15} {2, 15}\n","Titulo","N. Paginas","Fecha publicacion");foreach(var item in listadelibros){Console.WriteLine("{0,-60} {1, 15} {2, 15}", item.Title, item.PageCount, item.PublishedDate.ToShortDateString());}}```
Con query expresion sería asi:
publicIEnumerable<Book>BooksJavaForName(){return(from b in librosCollection where b.Categories.Contains("Java") orderby b.Title select b);}publicIEnumerable<Book>BooksMajor450Pages(){returnfrom b in librosCollection where b.PageCount>450 orderby b.PageCount descending select b;}