Maison >développement back-end >C++ >Comment puis-je faire pivoter les données à l'aide de LINQ ?

Comment puis-je faire pivoter les données à l'aide de LINQ ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 22:05:41505parcourir

How Can I Pivot Data Using LINQ?

Pivot de données à l'aide de LINQ

Dans le traitement des données, le pivotement fait référence à la transformation de données d'un format avec plusieurs colonnes et lignes vers un format avec plusieurs lignes et colonnes. Voici comment effectuer le pivotement des données à l'aide de LINQ :

Considérez une collection d'éléments contenant une énumération TypeCode et un objet User. Comme décrit par l'enquête, vous souhaitez aplatir la collection et la présenter dans une structure en forme de grille, comme le montrent les exemples de données fournis :

TypeCode User
1 Don Smith
1 Mike Jones
1 James Ray
2 Tom Rizzo
2 Alex Homes
3 Andy Bates

Le résultat souhaité serait :

1 2 3
Don Smith Tom Rizzo Andy Bates
Mike Jones Alex Homes
James Ray

Solution LINQ :

LINQ peut gérer efficacement ce type d'opération de pivotement. Voici un extrait de code qui montre comment :

// Sample data
var data = new[] {
    new { Foo = 1, Bar = "Don Smith"},
    new { Foo = 1, Bar = "Mike Jones"},
    new { Foo = 1, Bar = "James Ray"},
    new { Foo = 2, Bar = "Tom Rizzo"},
    new { Foo = 2, Bar = "Alex Homes"},
    new { Foo = 3, Bar = "Andy Bates"},
};

// Group into columns and select rows per column
var grps = from d in data
          group d by d.Foo
          into grp
          select new {
              Foo = grp.Key,
              Bars = grp.Select(d2 => d2.Bar).ToArray()
          };

// Find the total number of (data) rows
int rows = grps.Max(grp => grp.Bars.Length);

// Output columns
foreach (var grp in grps) {
    Console.Write(grp.Foo + "\t");
}
Console.WriteLine();

// Output data
for (int i = 0; i < rows; i++) {
    foreach (var grp in grps) {
        Console.Write((i < grp.Bars.Length ? grp.Bars[i] : null) + "\t");
    }
    Console.WriteLine();
}

Sortie :

1 2 3
Don Smith Tom Rizzo Andy Bates
Mike Jones Alex Homes
James Ray

Cette solution LINQ fait pivoter efficacement les données vers le format souhaité en regroupant les éléments avec la même valeur Foo puis en sélectionnant les barres (noms d'utilisateur) par colonne. Il calcule le nombre maximum de lignes en fonction des entrées dans chaque colonne et génère le résultat sous forme de tableau bien structuré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn