Compartir a través de


Agrupar datos

Actualización: noviembre 2007

Agrupar es la operación de colocar los datos en grupos de manera que los elementos de cada grupo compartan un atributo común.

La ilustración siguiente muestra los resultados de agrupar una secuencia de caracteres. La clave de cada grupo es el carácter.

Operaciones de agrupamiento en LINQ

Los métodos de operador de consulta estándar que agrupan los elementos de datos se enumeran en la sección siguiente.

Métodos

Nombre del método

Description

Sintaxis de las expresiones de consulta de C#

Sintaxis de las expresiones de consulta de Visual Basic

Más información

GroupBy

Agrupa los elementos que comparten un atributo común. Cada grupo se representa mediante un objeto IGrouping<TKey, TElement>.

group … by

O bien,

group … by … into …

Group … By … Into …

Enumerable.GroupBy

Queryable.GroupBy

ToLookup

Inserta elementos en un objeto Lookup<TKey, TElement> (diccionario uno a varios) según una función del selector de claves.

No es aplicable

No es aplicable

Enumerable.ToLookup

Ejemplo de sintaxis de expresiones de consulta

En el ejemplo de código siguiente se utiliza la cláusula group by en C# o la cláusula Group By en Visual Basic para agrupar los enteros en una lista en función de si son pares o impares.

Dim numbers As New System.Collections.Generic.List(Of Integer) _
    (New Integer() {35, 44, 200, 84, 3987, 4, 199, 329, 446, 208})

Dim query = From number In numbers _
            Group By Remainder = (number Mod 2) Into Group

Dim sb As New System.Text.StringBuilder()
For Each group In query
    sb.AppendLine(If(group.Remainder = 0, vbCrLf & "Even numbers:", vbCrLf & "Odd numbers:"))
    For Each num In group.Group
        sb.AppendLine(num)
    Next
Next

' Display the results.
MsgBox(sb.ToString())

' This code produces the following output:

' Odd numbers:
' 35
' 3987
' 199
' 329

' Even numbers:
' 44
' 200
' 84
' 4
' 446
' 208

List<int> numbers = new List<int>() { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 };

IEnumerable<IGrouping<int, int>> query = from number in numbers
                                         group number by number % 2;

foreach (var group in query)
{
    Console.WriteLine(group.Key == 0 ? "\nEven numbers:" : "\nOdd numbers:");
    foreach (int i in group)
        Console.WriteLine(i);
}

/* This code produces the following output:

    Odd numbers:
    35
    3987
    199
    329

    Even numbers:
    44
    200
    84
    4
    446
    208
*/

Información adicional sobre cómo agrupar los datos

Vea también

Conceptos

Información general sobre operadores de consulta estándar

Referencia

group (Cláusula, Referencia de C#)

Group By (Cláusula, Visual Basic)

System.Linq