Microsoft MVP

Email y Rss

email rss

Klout

Seguidores en facebook

Timeline de mi Twitter

Tienes preguntas?

Ideas de un Conejo
Más allá de los sistemas de información: (C#)=> videojuegos, soluciones a problemas interesantes y Sistemas Operativos
XNA
C#
Sistemas Operativos
Varios
Windows Phone
WinRT
XAML
Azure
HTML 5
Acerca de

C# – Cómo generar datos aleatorios para realizar pruebas

August 19th, 2012 by JuanK

Follow @JuanKRuiz

En ocasiones necesitamos un conjunto de datos para generar pruebas pero no siempre tenemos tiempo o infraestructura para obtener esos datos de una base de datos previamente creada.
Utilizando algo de linq e ingenio podemos crear un conjunto de datos aleatorios que nos permitan realizar pruebas de manera rápida.

En este ejemplo crearemos una lista de personas, el objeto personas es este:

public class Persona
{
    public string Nombre { get; set; }
    public string Apellido { get; set; }
    public int Cedula { get; set; }
    public string Profesion { get; set; }
}

Ahora crearemos nuestro DataSource, inicialmente bastará con una pequeña lista de apenas 10 personas.

public class DataSourcePersonas
{
    public List<Persona> ListaPersonas{ get; set; }
    public DataSourcePersonas()
    {
        var listaPivote = new ObservableCollection<Persona>() 
        {
            new Persona(){ Profesion="Ingeniero",Apellido="Ruiz Pacheco",Nombre="Juan Carlos"},
            new Persona(){ Profesion="Médico",   Apellido="Montoya",     Nombre="Leidy Paola"},
            new Persona(){ Profesion="Analista", Apellido="Gates",       Nombre="Bill"},
            new Persona(){ Profesion="Enfermero",Apellido="Jobs",        Nombre="Steve"},
            new Persona(){ Profesion="Conductor",Apellido="Torvalds",    Nombre="Linus"},
            new Persona(){ Profesion="Piloto",   Apellido="Cruise",      Nombre="Tom"},
            new Persona(){ Profesion="Capitán",  Apellido="Cat",         Nombre="Tom"},
            new Persona(){ Profesion="Biólogo",  Apellido="Master",      Nombre="Osho"},
            new Persona(){ Profesion="Físico",   Apellido="Eye",         Nombre="Golden"},
            new Persona(){ Profesion="Astrónomo",Apellido="Telecom",     Nombre="Telefonica"}
        };
    }
}

Con esto será suficiente, ahora es tiempo para la magia.

Utilizando Linq haremos simplemente un producto cartesiano, consultaremos listaPivote haciendo join consigo misma, para producir una combinatoria de Personas, suena complicado? realmente es muy fácil, mira:

public class DataSourcePersonas
{
    public List<Persona> ListaPersonas{ get; set; }

    public DataSourcePersonas()
    {
        var listaPivote = new ObservableCollection<Persona>() 
        {
            new Persona(){ Profesion="Ingeniero",Apellido="Ruiz Pacheco",Nombre="Juan Carlos"},
            new Persona(){ Profesion="Médico",   Apellido="Montoya",     Nombre="Leidy Paola"},
            new Persona(){ Profesion="Analista", Apellido="Gates",       Nombre="Bill"},
            new Persona(){ Profesion="Enfermero",Apellido="Jobs",        Nombre="Steve"},
            new Persona(){ Profesion="Conductor",Apellido="Torvalds",    Nombre="Linus"},
            new Persona(){ Profesion="Piloto",   Apellido="Cruise",      Nombre="Tom"},
            new Persona(){ Profesion="Capitán",  Apellido="Cat",         Nombre="Tom"},
            new Persona(){ Profesion="Biólogo",  Apellido="Master",      Nombre="Osho"},
            new Persona(){ Profesion="Físico",   Apellido="Eye",         Nombre="Golden"},
            new Persona(){ Profesion="Astrónomo",Apellido="Telecom",     Nombre="Telefonica"}
        };

        Random genCedula = new Random();

        var listaFull = from persona in listaPivote
                        from persona2 in listaPivote
                        from persona3 in listaPivote
                        select new Persona(){ Cedula = (int)(genCedula.NextDouble() * 999999999),
                                                        Nombre=persona.Nombre, 
                                                        Apellido=persona2.Apellido, 
                                                        Profesion=persona3.Profesion };

        ListaPersonas = new List<Persona>(listaFull);
    }
}

esto nos ha generado una lista de 1000 registro partiendo tan solo 10, una parte del truco es hacer join múltiple y la otra es la clausula select, fijate que allí creamos nuevos objetos de tipo Persona pero en su creación replicamos nombre, apellido y profesión cada uno de una lista de personas diferente! (realmente es la misma pero de otra parte del join).

Hasta allí ya esta hecho todo el trabajo, para darle un poco de mayor diversidad a los datos el atributo Cedula lo he inicializado con un valor aleatorio entre 0 y 999999999 .

Gracias a esta combinación podemos generar automáticamente registros como estos:

Profesion="Enfermero",Apellido="Ruiz Pacheco" Nombre="Tom"
Profesion="Conductor",Apellido="Montoya",     Nombre="Tom"
Profesion="Piloto",   Apellido="Gates",       Nombre="Osho"
Profesion="Capitán",  Apellido="Jobs",        Nombre="Golden"
Profesion="Biólogo",  Apellido="Torvalds",    Nombre="Telefonica"

Eso es todo!

Print Friendly

Follow @JuanKRuiz

  • 4 Comentarios »
  • Publicado en la categoría 'C#'

4 comentarios to “C# – Cómo generar datos aleatorios para realizar pruebas ”


  • Cómo crear agrupamiento utilizando listas en WinRT? XAML- C# | Ideas de un Conejo Says:
    August 19th, 2012 at 4:06 pm  

    [...] Los primero es que debes tener ya establecido un conjunto de datos, ¿necesitas datos de prueba? “C# – Cómo generar datos aleatorios para realizar pruebas”. [...]

  • Vicente Zambrano Says:
    August 19th, 2012 at 5:15 pm  

    Tengo una duda, recién estoy empezando a manejar el ObservableCollection, y me di cuenta que al momento de instanciarla la dejaste como var, cual es el objetivo de eso.?

    Gracias.

  • JuanK Says:
    August 19th, 2012 at 5:16 pm  

    El único objetivo es hacer el código mas legible, debido a que C# soporta inferencia de tipos, el sabe el tipo correcto de la variable, el compilador lo deduce al revisar lo que viene después del new.

  • Cómo utilizar controles de lista para mostrar colecciones de datos en WinRT? - C# - XAML | Ideas de un Conejo Says:
    August 20th, 2012 at 12:31 pm  

    [...] Para poder revisar estos temas lo primero que necesitamos es definir un origen de datos, utilizaremos una List de Persona como datos de prueba. Necesitas datos de prueba? C# – Cómo generar datos aleatorios para realizar pruebas [...]

Deja un comentario

Redes Sociales

Follow @JuanKRuiz
Answer Questions

Busca en el blog

Artículos Relacionados

  • Cómo utilizar controles de lista para mostrar colecciones de datos en WinRT? – C# – XAML
  • C# – 10 pasos para Consumir el RSS de Top news de “The Washington Post” en un Toolbar para IE
  • C# – Como obtener un manejador (handle) para una ventana de WPF
  • Artículos Relacionados

  • Cómo utilizar controles de lista para mostrar colecciones de datos en WinRT? – C# – XAML
  • C# – 10 pasos para Consumir el RSS de Top news de “The Washington Post” en un Toolbar para IE
  • C# – Como obtener un manejador (handle) para una ventana de WPF
  • Nube de Temas

    API - Azure - C# - codigo - Forms - IE - IE9 - Image - imagenes - IT - Microsoft - MVP - Pinned - PowerShell - Proceso - rendimiento - RSS - sistema - Sistemas Operativos - Site - Visual - WCF - Windows - Windows 8 - Windows Store - WinRT - WndProc - WPF - XAML - XNA

    Blogs recomendados

  • VBCodigoPocketPC Espacio para tratar temas de programacion para dispositivos moviles, Pocket PC, Compact Framework, Embbeded Visual Basic, Visual Basic.NET , C# (C Sharp)
  • Róbinson Moscoso Estaré publicando acá cosas sobre tecnologia .NET, situacioines cotidianas de las que voy aprendiendo… sirve como extensión de memoria.
  • .Net C# Blog de Nelsón Venegas
  • Warnov Microsoft Developer Evangelist
  • IT LIfe Blog de mi Hermano que esta en el lado claro: IT
  • Sorey Garcia Una chica del común con la firme intención de no serlo
  • Black Byte videojuegos, modelado y animación 3d
  • Road to IT World Cosas interesantes de IT
  • Marcela Chitiva Un poco de esto… un poco de aquello
  • Surviving the Nigth El mejor blog para aquellos que nos gustan los “internals”
  • Meta

    1. Log in
    2. WordPress

    Ideas de un Conejo is powered by Wordpress. Theme designed by Juan Carlos Ruiz.