LINQ | Unión (unión interna)

En LINQ, los operadores de unión se utilizan para integrar dos fuentes de datos en una fuente de datos que comparte algunos atributos comunes. Por ejemplo, en un banco, el gerente tiene dos listas, la primera lista contiene los datos personales y otra lista contiene los detalles del préstamo hipotecario. Ahora el gerente quiere crear una lista que contenga los nombres de aquellas personas que toman un préstamo hipotecario y pertenecen al mismo lugar, por lo que usa la cláusula de unión para crear este tipo de lista.
La cláusula de unión siempre toma dos fuentes de datos, los elementos presentes en la fuente de datos deben contener alguna propiedad para que pueda compararse con otra fuente de datos. El resultado de la cláusula de unión depende del tipo de cláusula de unión que se utilice. Los tipos más comunes de unión son:

  1. Unir internamente
  2. Unión cruzada
  3. Izquierda combinación externa
  4. unirse al grupo

Unir internamente

En LINQ, se usa una combinación interna para entregar un resultado que contiene solo aquellos elementos de la primera fuente de datos que aparecen solo una vez en la segunda fuente de datos. Y si un elemento de la primera fuente de datos no tiene elementos coincidentes, no aparecerá en el conjunto de datos de resultados. Aquí Join y Inner join son lo mismo.

Puntos importantes:

  • Todas las uniones realizadas por cláusula de unión son equijoins.
  • Admite la sintaxis de consulta en los lenguajes C# y VB.Net.

    Sintaxis:

    join … in … 
    on … equals …
    
  • Admite la sintaxis del método en los lenguajes C# y VB.Net. Aquí, el método de unión está sobrecargado de dos maneras diferentes:
    1. Join <TOuter,TInner,TKey,TResult>(IEnumerable <TOuter>, IEnumerable <TInner>, Func <TOuter,TKey>,Func <TInner,TKey>,Func <TOuter,TInner,TResult>): Este método le permite correlacionar los elementos de dos secuencias en función de las claves coincidentes dadas. Aquí, el comparador de igualdad predeterminado se usa para comparar claves.
    2. Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>,IEnumerable<TInner>, Func<TOuter,TKey>,Func<TInner,TKey>,Func<TOuter,TInner,TResult>,IEqualityComparer<TKey>): Este método le permite correlacionar los elementos de dos secuencias en función de las claves coincidentes. Se usa un IEqualityComparer<T> especificado para comparar claves.
  • Método de unión presente en las clases Queryable y Enumerable.
  • El funcionamiento de Join es similar a una unión interna en SQL.
  • La cláusula de unión compara las fuentes de datos, de acuerdo con las claves especificadas usando la palabra clave equals, aquí == no es válido.

Ejemplo 1:

// C# program to illustrate the concept
// of inner join in Query Syntax
using System;
using System.Linq;
using System.Collections.Generic;
  
// Employee details
public class Employee1 {
  
    public int emp_id
    {
        get;
        set;
    }
  
    public string emp_name
    {
        get;
        set;
    }
    public string emp_lang
    {
        get;
        set;
    }
}
  
// Employee department details
public class Employee2 {
  
    public int emp_id
    {
        get;
        set;
    }
  
    public string emp_dept
    {
        get;
        set;
    }
    public int emp_salary
    {
        get;
        set;
    }
}
  
class GFG {
  
    // Main method
    static public void Main()
    {
        List<Employee1> emp1 = new List<Employee1>() {
  
            new Employee1() {emp_id = 300, emp_name = "Anu",
                                           emp_lang = "C#"},
  
            new Employee1() {emp_id = 301, emp_name = "Mohit",
                                              emp_lang = "C"},
  
            new Employee1() {emp_id = 302, emp_name = "Sona",
                                          emp_lang = "Java"},
                                            
            new Employee1() {emp_id = 303, emp_name = "Lana",
                                          emp_lang = "Java"},
                                            
            new Employee1() {emp_id = 304, emp_name = "Lion",
                                            emp_lang = "C#"},
                                              
            new Employee1() {emp_id = 305, emp_name = "Ramona",
                                             emp_lang = "Java"},
  
        };
  
        List<Employee2> emp2 = new List<Employee2>() {
  
            new Employee2() {emp_id = 300, emp_dept = "Designing",
                                              emp_salary = 23000},
  
            new Employee2() {emp_id = 301, emp_dept = "Developing",
                                               emp_salary = 40000},
  
            new Employee2() {emp_id = 302, emp_dept = "HR",
                                       emp_salary = 50000},
  
            new Employee2() {emp_id = 303, emp_dept = "Designing",
                                              emp_salary = 60000},
  
        };
  
        // Query to find the name and
        // the salary of the employees
        // Using Inner Join
        var res = from e1 in emp1
                    join e2 in emp2
                        on e1.emp_id equals e2.emp_id
                            select new 
                            {
                                Emp_Name = e1.emp_name,
                                Emp_Salary = e2.emp_salary
                            };
  
        // Display result
        Console.WriteLine("Employee and their Salary: ");
        foreach(var val in res)
        {
            Console.WriteLine("Employee Name: {0} Salary: {1}",
                                 val.Emp_Name, val.Emp_Salary);
        }
    }
}
Producción:

Employee and their Salary: 
Employee Name: Anu Salary: 23000
Employee Name: Mohit Salary: 40000
Employee Name: Sona Salary: 50000
Employee Name: Lana Salary: 60000

Ejemplo 2:

// C# program to illustrate the concept
// of inner join in Method Syntax
using System;
using System.Linq;
using System.Collections.Generic;
  
// Employee details
public class Employee1 {
  
    public int emp_id
    {
        get;
        set;
    }
  
    public string emp_name
    {
        get;
        set;
    }
    public string emp_lang
    {
        get;
        set;
    }
}
  
// Employee department details
public class Employee2 {
  
    public int emp_id
    {
        get;
        set;
    }
  
    public string emp_dept
    {
        get;
        set;
    }
    public int emp_salary
    {
        get;
        set;
    }
}
  
class GFG {
  
    // Main method
    static public void Main()
    {
        List<Employee1> emp1 = new List<Employee1>() {
  
            new Employee1() {emp_id = 300, emp_name = "Anu",
                                           emp_lang = "C#"},
  
            new Employee1() {emp_id = 301, emp_name = "Mohit",
                                              emp_lang = "C"},
  
            new Employee1() {emp_id = 302, emp_name = "Sona",
                                          emp_lang = "Java"},
                              
            new Employee1() {emp_id = 303, emp_name = "Lana",
                                          emp_lang = "Java"},
                                            
            new Employee1() {emp_id = 304, emp_name = "Lion",
                                            emp_lang = "C#"},
                                              
            new Employee1() {emp_id = 305, emp_name = "Ramona",
                                            emp_lang = "Java"},
  
        };
  
        List<Employee2> emp2 = new List<Employee2>() {
  
            new Employee2() {emp_id = 300, emp_dept = "Designing",
                                              emp_salary = 23000},
  
            new Employee2() {emp_id = 301, emp_dept = "Developing",
                                               emp_salary = 40000},
  
            new Employee2() {emp_id = 302, emp_dept = "HR",
                                       emp_salary = 50000},
  
            new Employee2() {emp_id = 303, emp_dept = "Designing",
                                              emp_salary = 60000},
  
        };
  
        // Query to find the name and
        // the department of the employees
        // Using Join Method
        var res = emp1.Join(emp2,
                            e1 => e1.emp_id,
                            e2 => e2.emp_id,
                            (e1, e2) => new {
                                EmployeeName = e1.emp_name,
                                EmployeeDepartment = e2.emp_dept });
  
        // Display result
        Console.WriteLine("Employee Name and their Department:");
        foreach(var val in res)
        {
            Console.WriteLine("Employee Name: {0} Department: {1}",
                         val.EmployeeName, val.EmployeeDepartment);
        }
    }
}
Producción:

Employee Name and their Department:
Employee Name: Anu Department: Designing
Employee Name: Mohit Department: Developing
Employee Name: Sona Department: HR
Employee Name: Lana Department: Designing

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *