Cláusula Lookup
Permite usar toda la colección en un diccionario y agrupar los datos por una propiedad.
Introducción
Bienvenida al curso
Prerrequisitos
¿Qué es LINQ?
Programación declarativa vs. imperativa
Utilizando LINQ por primera vez
Configuración de proyecto
Creando el proyecto base
Configurando clases
Importando datos
Operadores básicos
Usando el operador Where
Ejercicio para aplicar el operador Where
Operadores All y Any
Operador Contains
Operadores OrderBy y OrderByDescending
Ejercicio operador OrderBy
Operadores Take y Skip
Selección dinámica de datos
Operadores de agregación
Operadores LongCount y Count
Operadores Min y Max
Operadores MinBy y MaxBy
Operadores Sum y Aggregate
Operador Average
Agrupamiento de datos
Cláusula GroupBy
Ejercicio cláusula GroupBy
Cláusula Lookup
Cláusula Join
Cierre de curso
Recapitulación sobre LINQ
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
Paga en 4 cuotas sin intereses
Termina en:
Miguel Teheran
Aportes 10
Preguntas 1
Permite usar toda la colección en un diccionario y agrupar los datos por una propiedad.
void printDictionary(ILookup<char, Book> listBooks, char letter)
{
char letterUpper = Char.ToUpper(letter);
if (listBooks[letterUpper].Count() == 0)
{
Console.WriteLine($"No hay libros que inicien con la letra '{letterUpper}'");
}
else
{
Console.WriteLine("{0, -60} {1, 15} {2, 15}\n", "Título", "Nro. Páginas", "Fecha de Publicación");
foreach (var book in listBooks[letterUpper])
{
Console.WriteLine("{0, -60} {1, 15} {2, 15}", book.Title, book.PageCount, book.PublishedDate.ToShortDateString());
}
}
}
Agrego transformar cualquier carácter a mayúscula y un condicional que imprima un mensaje si no hay libros con dicho carácter.
Query
public ILookup<char, Book> DictionaryBookByChar()
{
// En el ToLookUp se pone los valores del diccionario que vas a retornar (char, book)
return booksCollection.ToLookup(x => x.Title[0], x => x);
}
Diccionario de libros agrupados por primera letra del titulo
var dictionaryLookup = queries.DictionaryBookByChar();
PrintDictionary(dictionaryLookup, 'A');
Función para imprimir el diccionario que retorna el Query
void PrintDictionary(ILookup<char, Book> bookList, char letter)
{
Console.WriteLine("{0,-60} {1, 15} {2, 15}\n", "Titulo", "N. Paginas", "Fecha publicacion");
foreach (var item in bookList[letter])
{
Console.WriteLine("{0,-60} {1, 15} {2, 15}",item.Title,item.PageCount,item.PublishedDate.Date.ToShortDateString());
}
}
Se puede retornar un IEnumerable<Book> y recibir como propiedad el carácter de búsqueda en lugar de ILookup<char, Book> en la función de ListadeLibros, con los siguientes cambios:
public IEnumerable<Book> DiccionaryBooksInitialCharacter(char character)
{
var diccionary = librosCollection.ToLookup(p => p.Title[0], p => p);
return diccionary[character];
}
De esa forma podemos reutilizar la función de imprimir variables:
void printValues(IEnumerable<Book> listBooks, Book aBook, IEnumerable<IGrouping<int, Book>> ListBooksGrouped)
{
Console.WriteLine("{0,-60} {1,15} {2,15}\n", "Titulo", "N paginas", "Fecha Publicacion");
if (listBooks != null)
{
BookListPrint(listBooks);
}
else if (aBook != null)
{
Console.WriteLine("{0,-60} {1,15} {2,15}", aBook.Title, aBook.PageCount, aBook.PublishedDate.ToShortDateString());
}
else if (ListBooksGrouped != null)
{
foreach (var group in ListBooksGrouped)
{
Console.WriteLine("\n Grupo: " + group.Key);
BookListPrint(group);
}
}
}
void BookListPrint(IEnumerable<Book> listBooks)
{
foreach (Book book in listBooks)
{
Console.WriteLine("{0,-60} {1,15} {2,15}", book.Title, book.PageCount, book.PublishedDate.ToShortDateString());
}
}
Para llamarla solo pasamos el caracter de busqueda a la funcion del objeto queries:
printValues(queries.DiccionaryBooksInitialCharacter('S'), null, null);
Podemos guardar el formato del output en una variable:
string formatoDiccionario = "{0,-60} {1, 15} {2, 15}";
void PrintDictionary(ILookup<char, Book> bookList, char letter)
{
Console.WriteLine($"{formatoDiccionario}\n", "Titulo", "N. Paginas", "Fecha publicacion");
foreach (var item in bookList[letter])
{
Console.WriteLine($"{formatoDiccionario}", item.Title, item.PageCount, item.PublishedDate.Date.ToShortDateString());
}
}
Así me quedo el método ImprimirDiccionario reutilizando el método ImprimirValores
void ImprimirDiccionario(ILookup<char, Book> ListaDeLibros, char letra)
{
ImprimirValores(ListaDeLibros[letra]);
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?