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:
- Unir internamente
- Unión cruzada
- Izquierda combinación externa
- 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:
- 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.
- 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); } } }
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); } } }
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