Programación, Tecnología y Más...

Programación, Tecnología y Más...

Obtener Datos Filtrados Usando Linq

Siempre que trabajamos con registros o colecciones de datos tenemos la necesidad de hacer búsquedas usando algun filtro para obtener los datos que cumplan ciertas condiciones, pues bien ahora veremos como hacer esto utilizando LINQ(tecnología que estoy aprendiendo).

Para este ejemplo usare una lista de tipo clase(personas) para representar los registros y luego obtendremos los registros que sean iguales o mayores a la edad que el usuario especifique usando linq.

El ejemplo esta desarrollado con C# Y VB.Net al final encontraran los proyectos para descargar

Nuestro formulario tendrá el siguiente diseño.

Diseño


Empezaremos agregando una clase a nuestro proyecto Personas.cs Personas.vb y tendrá el siguiente código.
 public class Personas
    {
        private string nombre;
        private string apellido;
        private int edad;

        //propiedades
        public string Nombre
        {
            get { return nombre;}
            set { nombre = value; }
        }

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public int Edad
        {
            get { return edad; }
            set { edad = value; }
        }

        //constructor
        public Personas(string nombre, string apellido, int edad)
        {
            this.nombre = nombre;
            this.apellido = apellido;
            this.edad = edad;
        }

        //registros
        public static List<Personas> Registros()
        {
            List<Personas> personas = new List<Personas>();

            personas.Add(new Personas("Cristian","Torres",20));
            personas.Add(new Personas("Jose", "Alfaro", 18));
            personas.Add(new Personas("Briseyda", "Flores", 12));
            personas.Add(new Personas("Diana", "Turcios", 17));
            personas.Add(new Personas("Miguel", "Fernadez", 40));
            personas.Add(new Personas("Pedro", "Perez", 11));
            personas.Add(new Personas("Nicole", "Garcia", 20));

            return personas;
        }
    }

Public Class Personas
    Private _nombre As String
    Private _apellido As String
    Private _edad As Integer

    'propiedades
    Public Property Nombre() As String
        Get
            Return _nombre
        End Get
        Set(ByVal value As String)
            _nombre = value
        End Set
    End Property
    Public Property Apellido() As String
        Get
            Return _apellido
        End Get
        Set(ByVal value As String)
            _apellido = value
        End Set
    End Property
    Public Property Edad() As Integer
        Get
            Return _edad
        End Get
        Set(ByVal value As Integer)
            _edad = value
        End Set
    End Property
    'constructor
    Public Sub New(ByVal nombre As String, ByVal apellido As String, ByVal edad As Integer)
        _nombre = nombre
        _apellido = apellido
        _edad = edad
    End Sub
    'registros
    Public Shared Function Registros() As List(Of Personas)
        Dim personas As New List(Of Personas)()

        personas.Add(New Personas("Cristian", "Torres", 20))
        personas.Add(New Personas("Jose", "Alfaro", 18))
        personas.Add(New Personas("Briseyda", "Flores", 12))
        personas.Add(New Personas("Diana", "Turcios", 17))
        personas.Add(New Personas("Miguel", "Fernadez", 40))
        personas.Add(New Personas("Pedro", "Perez", 11))
        personas.Add(New Personas("Nicole", "Garcia", 20))

        Return personas
    End Function

End Class

El código es sencillo y fácil de entender lo único que se hace es crear una lista de registros de tipo clase Pesona que son los que utilizaremos para hacer nuestra consulta.

Ahora en nuestro en nuestro formulario tendremos el siguiente código.
public Form1()
        {
            InitializeComponent();
            CargarList();
        }

        List<Personas> personas;
        public void CargarList()
        {
            personas = Personas.Registros();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = Personas.Registros();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            List<Personas> resultados = new List<Personas>();

            int edad = Convert.ToInt32(textBox1.Text);

            var query = personas.Where(p => p.Edad >= edad);//obtener datos sean mayores e iguales a la edad digitada
         
            foreach (var result in query)
            {
                resultados.Add(result);
            }

            dataGridView1.DataSource = resultados;
        }  

 Public Sub New()
        InitializeComponent()
        CargarList()
    End Sub
    Dim pers As List(Of Personas)
    Public Sub CargarList()
        pers = Personas.Registros()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DataGridView1.DataSource = Personas.Registros()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim resultados As New List(Of Personas)

        Dim edad As Integer = Convert.ToInt32(TextBox1.Text)

        Dim query = pers.Where(Function(p) p.Edad >= edad) 'obtener datos sean mayores a la edad digitada        

        For Each result In query
            resultados.Add(result)
        Next

        DataGridView1.DataSource = resultados

    End Sub

En el código lo que hacemos primeramente es cargar los datos de la lista en el constructor del formulario.Luego en el evento load del formulario cargamos todos los datos de lista en el datagriedview.
Y para hacer el filtro de los datos en el evento click del botón puede verse que lo primero que hacemos es crear una lista de tipo personas llamada resultados que sera la que tendrá todos los registros que cumplan con el filtro que aremos que este caso sera por la edad, hacemos el filtro de nuestros datos usando linq y expresion lambda de la siguiente manera.
var query = personas.Where(p => p.Edad >= edad);
Dim query = pers.Where(Function(p) p.Edad >= edad)
Lo que estamos diciendo en esa linea es que obtendremos los registros de las personas donde la edad sea mayor o igual al dato introducido en el textbox.
Y por ultimo lo que hacemos en el código es llenar la lista resultados con los datos obtenidos de nuestra consulta.

Resultado 
 
 Resultado


Si quieren donarme para una soda lo pueden hacer aqui.


Publicar un comentario

0 Comentarios