Memindahkan Data dengan LINQ
Dalam senario tertentu, penstrukturan semula data ke dalam format yang berbeza menjadi perlu. Satu tugas biasa ialah memutar data, mengubahnya daripada struktur jadual kepada susun atur yang lebih padat. Walaupun pendekatan berulang tradisional seperti gelung foreach boleh mencapai ini, pendekatan tersebut memperkenalkan cabaran dengan pengubahsuaian koleksi semasa lelaran. Masukkan LINQ, bahasa pertanyaan berkuasa yang memudahkan manipulasi data, menawarkan penyelesaian yang lebih bersih dan lebih cekap untuk memutar data.
Pertimbangkan koleksi objek yang mengandungi penghitungan (TypeCode) dan contoh Pengguna. Matlamatnya adalah untuk meratakan koleksi ini menjadi struktur seperti grid, di mana setiap TypeCode sepadan dengan lajur dan Nama Pengguna disusun dalam baris.
LINQ menyediakan cara yang mudah untuk mencapai operasi pangsi ini. Dengan mengumpulkan koleksi mengikut TypeCode dan kemudian memilih Nama pengguna sebagai tatasusunan untuk setiap kumpulan, kami boleh mencipta lajur dengan berkesan. Coretan kod berikut menunjukkan pendekatan ini:
// 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() };
Selepas mencipta lajur, kita perlu menentukan jumlah bilangan baris, iaitu panjang maksimum mana-mana tatasusunan pengguna dalam kumpulan. Dengan maklumat ini, kami boleh mengulangi setiap kumpulan dan memaparkan nama pengguna yang sepadan, melapik dengan nilai nol jika perlu.
// 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(); }
Dengan memanfaatkan keupayaan kumpulan dan pemilihan LINQ, kod ini membolehkan kami memutarkan data dan menjana output yang dikehendaki dengan cara yang ringkas dan cekap.
Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Memudahkan Pemingsi dan Penstrukturan Semula Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!