En LINQ, los operadores de agrupación seleccionan los elementos de la secuencia o colección que contiene atributos comunes y los sirven en un grupo. O en otras palabras, podemos decir que el operador de agrupación devuelve el grupo de elementos en función de la clave dada. Este grupo se mantiene en un tipo especial de colección, que implementa la interfaz IGrouping<TKey, TElement>, donde TKey es la clave a través de la cual se crea el grupo y TElement es la colección de elementos que empareja con el valor de la clave de agrupación. Por ejemplo, una secuencia contiene 6 elementos, es decir, Abc, cvd, Abc, Abc, ert, Por, . Ahora queremos un grupo que contenga todos los Abc presentes en esa secuencia. Entonces Abc es la clave a través de la cual creamos otro grupo que contiene 3 Abc. Como se muestra en la siguiente imagen:
El operador de consulta estándar contiene 2 tipos diferentes de operadores de agrupación:
- Agrupar por
- Para buscar
Agrupar por operador
El funcionamiento del operador GroupBy es similar a la cláusula SQL GroupBy. Se utiliza para devolver el grupo de elementos que comparten los atributos comunes o la clave de la secuencia o colección dada. Cada grupo está representado por el objeto IGrouping<TKey, TElement>.
Puntos importantes:
- Admite la sintaxis de consulta en los lenguajes C# y VB.Net. Como se muestra en el ejemplo 1.
- También puede usar into con GroupBy en la consulta de C#. La palabra clave into le permite continuar con la consulta y puede realizar más operaciones de consulta. O en otras palabras, es un identificador temporal que le permite realizar una operación de consulta adicional.
- También puede usar Into Group con GroupBy en VB.Net.
- La consulta LINQ finaliza con la cláusula de ayuda Select o Groupby.
- También puede admitir la sintaxis de métodos en los lenguajes C# y VB.Net. Como se muestra en el ejemplo 2.
- Está presente tanto en la clase Queryable como en la Enumerable. Y en estas clases, el método GroupBy está sobrecargado en ocho tipos diferentes.
- Se implementa mediante el uso de ejecución diferida.
- El valor de la clave puede ser de cualquier tipo, ya sea string, int, flotante, anónimo, booleano, etc., según los requisitos del usuario.
- El grupo devuelto por este operador puede contener cero o más elementos que coincidan con el valor clave.
Ejemplo 1:
// C# program to divide the employees // in groups according to their salary using System; using System.Linq; using System.Collections.Generic; // Employee details public class Employee { public int emp_id { get; set; } public string emp_name { get; set; } public string emp_gender { get; set; } public string emp_hire_date { get; set; } public int emp_salary { get; set; } } class GFG { // Main method static public void Main() { List<Employee> emp = new List<Employee>() { new Employee() {emp_id = 209, emp_name = "Anjita", emp_gender = "Female", emp_hire_date = "12/3/2017", emp_salary = 20000}, new Employee() {emp_id = 210, emp_name = "Soniya", emp_gender = "Female", emp_hire_date = "22/4/2018", emp_salary = 30000}, new Employee() {emp_id = 211, emp_name = "Rohit", emp_gender = "Male", emp_hire_date = "3/5/2016", emp_salary = 40000}, new Employee() {emp_id = 212, emp_name = "Supriya", emp_gender = "Female", emp_hire_date = "4/8/2017", emp_salary = 40000}, new Employee() {emp_id = 213, emp_name = "Anil", emp_gender = "Male", emp_hire_date = "12/1/2016", emp_salary = 40000}, new Employee() {emp_id = 214, emp_name = "Anju", emp_gender = "Female", emp_hire_date = "17/6/2015", emp_salary = 50000}, }; // Query to divide the employees // in the groups according to // their salary using GroupBy // operator in query syntax var res = from e in emp group e by e.emp_salary; foreach(var val in res) { // Here salary is the key value Console.WriteLine("Group By Salary: {0}", val.Key); // Display name of the employees // Inner collection according to // the key value foreach(Employee e in val) { Console.WriteLine("Employee Name: {0}", e.emp_name); } } } }
Group By Salary: 20000 Employee Name: Anjita Group By Salary: 30000 Employee Name: Soniya Group By Salary: 40000 Employee Name: Rohit Employee Name: Supriya Employee Name: Anil Group By Salary: 50000 Employee Name: Anju
Ejemplo 2:
// C# program to divide the employees // in the groups according to their // language using System; using System.Linq; using System.Collections.Generic; // Employee details public class Employee { public int emp_id { get; set; } public string emp_name { get; set; } public string emp_gender { get; set; } public string emp_hire_date { get; set; } public int emp_salary { get; set; } public string emp_lang { get; set; } } class GFG { // Main method static public void Main() { List<Employee> emp = new List<Employee>() { new Employee() {emp_id = 209, emp_name = "Anjita", emp_gender = "Female", emp_hire_date = "12/3/2017", emp_salary = 20000, emp_lang = "Ruby"}, new Employee() {emp_id = 210, emp_name = "Soniya", emp_gender = "Female", emp_hire_date = "22/4/2018", emp_salary = 30000, emp_lang = "Java"}, new Employee() {emp_id = 211, emp_name = "Rohit", emp_gender = "Male", emp_hire_date = "3/5/2016", emp_salary = 40000, emp_lang = "Perl"}, new Employee() {emp_id = 212, emp_name = "Supriya", emp_gender = "Female", emp_hire_date = "4/8/2017", emp_salary = 40000, emp_lang = "Java"}, new Employee() {emp_id = 213, emp_name = "Anil", emp_gender = "Male", emp_hire_date = "12/1/2016", emp_salary = 40000, emp_lang = "C#"}, new Employee() {emp_id = 214, emp_name = "Anju", emp_gender = "Female", emp_hire_date = "17/6/2015", emp_salary = 50000, emp_lang = "C#"}, }; // Query to divide the employees in // the groups according to their // language using GroupBy method in // the method syntax var res = emp.GroupBy(e => e.emp_lang); foreach(var val in res) { // Here language is the key value Console.WriteLine("Group By Language: {0}", val.Key); // Display name of the employees // Inner collection according to // the key value foreach(Employee e in val) { Console.WriteLine("Employee Name: {0}", e.emp_name); } } } }
Group By Language: Ruby Employee Name: Anjita Group By Language: Java Employee Name: Soniya Employee Name: Supriya Group By Language: Perl Employee Name: Rohit Group By Language: C# Employee Name: Anil Employee Name: Anju
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