首页 >后端开发 >C++ >LINQ 如何简化数据透视和重组?

LINQ 如何简化数据透视和重组?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-05 15:33:40271浏览

How Can LINQ Simplify Data Pivoting and Restructuring?

使用 LINQ 透视数据

在某些情况下,有必要将数据重组为不同的格式。一项常见的任务是旋转数据,将其从表格结构转换为更简洁的布局。虽然像 foreach 循环这样的传统迭代方法可以实现这一点,但它们在迭代过程中带来了集合修改的挑战。输入 LINQ,这是一种功能强大的查询语言,可以简化数据操作,为数据透视提供更清晰、更高效的解决方案。

考虑包含枚举 (TypeCode) 和 User 实例的对象集合。目标是将此集合展平为类似网格的结构,其中每个 TypeCode 对应于一列,用户名按行排列。

LINQ 提供了一种实现此透视操作的简单方法。通过按类型代码对集合进行分组,然后选择用户名作为每个组的数组,我们可以有效地创建列。以下代码片段演示了这种方法:

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

// Group by TypeCode and select User name arrays
var groups = from d in data
              group d by d.TypeCode
              into grp
              select new {
                  TypeCode = grp.Key,
                  Users = grp.Select(d2 => d2.User).ToArray()
              };

创建列后,我们需要确定总行数,这是组中任何用户数组的最大长度。有了这些信息,我们就可以遍历每个组并显示相应的用户名,并在必要时用空值填充。

// Find total number of rows
int rows = groups.Max(grp => grp.Users.Length);

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

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

通过利用 LINQ 的分组依据和选择功能,此代码使我们能够旋转数据并以简洁高效的方式生成所需的输出。

以上是LINQ 如何简化数据透视和重组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn