/// <summary> /// Ejecuta la aplicación principal /// </summary> public void Run() { ServiciosImportacion imp = new ServiciosImportacion(); imp.ImportarCSV(Archivo); //Console.WriteLine(Archivo); //Console.ReadLine(); }
/// <summary> /// Ejecuta la aplicacion principal /// </summary> public void Run() { int j = 10; //var nombre = _config["nombre"]; ServiciosImportacion imp = new ServiciosImportacion(_config); IEnumerable <Publicacion> listaOriginal = imp.ImportarCSV(Archivo); ContextoPublicaciones ctx = new ContextoPublicaciones(_config); //ctx.Publicaciones.Where(p => p.Titulo.Contains("prog")); ctx.Database.ExecuteSqlRaw("truncate table Publicaciones"); foreach (var item in listaOriginal) { ctx.Publicaciones.Add(item); } ctx.SaveChanges(); Console.WriteLine($"Instancias generadas {Publicacion.ContadorInstancias}"); var stats = listaOriginal.Estadisticas <Publicacion>(h => h.Paginas); Console.WriteLine($"Minimo: {stats.min} Maximo: {stats.max} Promedio: {stats.prom}"); // AISLO LA EXPRESION LINQ (FLUENT) // // var xx = Enumerable.All(listaOriginal, publicacion => true); // var xxx = listaOriginal.Any(pub => pub.Tipo == TipoPublicacion.Revista); var filtrada = listaOriginal .Where((x) => x.Tipo == TipoPublicacion.Libro && x.Paginas > j) // IEnum<Publicacion> .Select((p) => new { p.Titulo, Hojas = p.Paginas }) // IEnumerable<????> .Where((pub) => pub.Titulo.Contains("prog", StringComparison.CurrentCultureIgnoreCase)); // ???? es un tipo anonimo que consiste de dos propiedades // Titulo (string) // Hojas (int?) foreach (var x in filtrada) { Console.WriteLine($"{x.Titulo} {x.Hojas}"); } /* * //List<Publicacion> listaFiltrada = new List<Publicacion>(); * * // DELEGADO GENERICO * // * Func<Publicacion, bool> predicado = FiltrarPaginas; * * foreach (var l in listaOriginal) * { * if (predicado(l)) * listaFiltrada.Add(l); * } * foreach (Publicacion p in listaFiltrada) * { * Console.WriteLine($"{p.Titulo} {p.Paginas}"); * } * * /* * Publicacion --> bool * * (pub) => pub.Tipo == TipoPublicacion.Revista * */ /* * // CASTING TRADICIONAL QUE PUEDE PROVOCAR EXCEPCIONES SI NO SE PUEDE CONVERTIR * // * // List<Publicacion> listaReal = (List<Publicacion>)lista ; * * List<Publicacion> listaReal = lista as List<Publicacion> ?? new List<Publicacion>(); * * // usamos throw para generar una excepcion propia * // * // List<Publicacion> listaReal = lista as List<Publicacion> ?? throw new ApplicationException(""); * * * if (listaReal.Count >= 10) * { * Console.WriteLine($"{listaReal[10].Titulo}"); * } * * int i = 1; * foreach (Publicacion p in lista) * { * Console.WriteLine($"{i++} -- {p.Titulo}"); * } */ Console.ReadLine(); }
public void Run() { Console.Clear(); Header("biblioZ-cli", "Interface de linea de comando para BiblioZone"); try { int opcion = Prompt.Menu("Seleccionar una de las acciones que queres realizar", new[] { "Importar Libros desde --file y ejecutar las pruebas en memoria", "Importar Libros desde --file y guardar en la DB", "*** Importar Autores desde --file [falta implementar guardar en la DB]", "Consultas varias desde el contexto", "Pruebas ingresando Libros" }); // TODO_HECHO obtener archivo desde la configuracion // // --file=D:\CURSOS\INCOMPANY\clase\datos\libros.csv --tipo=libros // // --file=D:\CURSOS\INCOMPANY\clase\datos\autores.csv --tipo=autores // // NOTA: cuando ponemos el menu, no tiene sentido usar la opcion --tipo // string file = _config["file"]; if (opcion.In(0, 2, 1) && file == null) { throw new ApplicationException("La opcion seleccionada necesita que se pase un archivo en --file"); } switch (opcion) { case 0: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Libros {archivo}", file); IEnumerable <Libro> lista = _imp.ImportarCSV(file); _logger.LogInformation("Ejecutando pruebas en memoria..."); // ejecutamos las pruebas sobre la lista importada (memoria) // Pruebas(lista); } } break; case 1: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Libros {archivo}", file); IEnumerable <Libro> lista = _imp.ImportarCSV(file); _logger.LogInformation("Iniciando el proceso de exportacion"); // eliminamos los datos previos?? if (Prompt.Confirm("Eliminamos datos previos?", true, "WARNING Esta operacion eliminara todos los datos de las 3 tablas de Articulos!!")) { _exp.ClearDatabase(); } // pasamos la responsabilidad de la exportacion al componente adecuado... // _exp.ExportarListaDeLibros(lista); } } break; case 2: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Autores {archivo}", file); var autoresTemp = _imp.ImportarAutores(file); Console.WriteLine("Lista de autores importados..."); foreach (var item in autoresTemp) { Console.WriteLine($"Se importo el siguiente par (idLibro, autor) ==> {item}"); _logger.LogDebug("Se importo el siguiente par (idLibro, autor) ==> {tupla}", item); } } } break; case 3: { string editorial = Prompt.Input <string>("Ingresar el nombre de una editorial"); Console.WriteLine($"Titulos para la Editorial {editorial}:\n"); foreach (string titulo in _exp.ObtenerTitulosDeEditorial(editorial)) { Console.WriteLine(titulo); } } break; case 4: { Console.WriteLine($"Pruebas de ingresos varias para libros y autores:\n"); string titulo = Prompt.Input <string>("Ingresar titulo o parte del titulo"); var libroResultado = _exp.GetLibros(titulo).FirstOrDefault(); if (libroResultado == null) { // crear nuevo libro... libroResultado = new Libro() { ID = "1234", Titulo = titulo, Publicacion = null }; } else { Console.WriteLine($"Autores del libro: {libroResultado.Titulo}"); foreach (var au in libroResultado.LibroAutores) { Console.WriteLine($"ID={au.ID_Autor} ; Nombre={au.Autor.Nombre}"); } } string autor = Prompt.Input <string>("Ingresar nombre del autor (exacto)"); var autorResultado = _exp.GetAutor(autor); if (autorResultado == null) { autorResultado = new Autor() { Nombre = autor }; } else { Console.WriteLine($"Libros escritos por {autor}"); foreach (var li in autorResultado.AutorLibros) { Console.WriteLine($"{li.Libro.Titulo}"); } } // PARA MEDITAR -- De que manera podemos evitar el UPDATE del Libro que no esta modificado?? // libroResultado.LibroAutores.Add(new LibroAutor() { Libro = libroResultado, Autor = autorResultado }); _exp.AgregarLibro(libroResultado); // _exp.AgregarLibroAutor(new LibroAutor() { Libro = libroResultado, Autor = autorResultado }); Console.WriteLine($"GUID: {libroResultado.ID_Real} Fecha: {libroResultado.Publicacion}"); } break; } } catch (ApplicationException ex) when(ex.Data.Contains("archivo")) { Console.WriteLine($"Se produjo una excepcion {ex.Message} Archivo: {ex.Data["archivo"]}"); } catch (NullReferenceException ex) { Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.WriteLine(); Console.WriteLine("[finally] ==> programa terminado!!"); } }