首頁 >後端開發 >C++ >LINQ 如何簡化資料透視與重組?

LINQ 如何簡化資料透視與重組?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-05 15:33:40299瀏覽

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