使用 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中文網其他相關文章!