Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Secara Dinamik OrderBy Property dalam LINQ?

Bagaimanakah Saya Boleh Menentukan Secara Dinamik OrderBy Property dalam LINQ?

Susan Sarandon
Lepaskan: 2025-01-10 12:35:42
asal
309 orang telah melayarinya

How Can I Dynamically Specify the OrderBy Property in LINQ?

Tentukan secara dinamik parameter LINQ OrderBy

Dalam C#, kaedah OrderBy LINQ membenarkan pengisihan data berdasarkan sifat atau ungkapan yang ditentukan. Tetapi bagaimanakah kita secara dinamik menentukan sifat atau ungkapan untuk diisih mengikut?

Soalan:

Memandangkan parameter, kami ingin mengisih senarai pelajar berdasarkan atribut yang ditentukan, tetapi pada masa ini, nama atribut dalam panggilan OrderBy dikodkan keras.

Contoh:

<code class="language-csharp">List<Student> existingStudents = new List<Student> { new Student { ... }, new Student { ... } };
List<Student> orderByAddress = existingStudents.OrderBy(c => c.Address).ToList();</code>
Salin selepas log masuk

Sasaran:

Kami mahu mengambil nama sifat sebagai parameter dan bukannya menggunakan nama sifat statik dalam OrderBy.

Contoh:

<code class="language-csharp">string param = "City";
List<Student> orderByCity = existingStudents.OrderBy(c => c.City).ToList(); //仍然需要明确指定属性</code>
Salin selepas log masuk

Penyelesaian:

Menggunakan refleksi, kita boleh membina ungkapan OrderBy secara dinamik:

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string orderByProperty, bool desc)
{
    // ...  (反射代码构建表达式树) ...
    return source.Provider.CreateQuery<T>(resultExpression);
}</code>
Salin selepas log masuk

Anda kemudian boleh mengisih secara dinamik mengikut atribut yang ditentukan:

<code class="language-csharp">existingStudents.OrderBy("City", true); // 降序
existingStudents.OrderBy("City", false); // 升序</code>
Salin selepas log masuk

(Nota: Pelaksanaan kod refleksi lengkap adalah lebih rumit dan ditinggalkan di sini. Anda perlu menggunakan ruang nama System.Linq.Expressions untuk membina pepohon ungkapan dan mengendalikan kemungkinan pengecualian, seperti atribut yang tidak wujud.) Penyelesaian ini memberikan idea pengisihan dinamik Pelaksanaan lengkap memerlukan penulisan kod yang lebih mantap mengikut situasi sebenar. Menggunakan c => param secara langsung adalah satu kesilapan, kerana ini hanya akan mengisih rentetan parameter itu sendiri, bukan sifat objek pelajar. Refleksi mesti digunakan untuk memperoleh sifat secara dinamik dan membina pepohon ungkapan yang betul.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Secara Dinamik OrderBy Property dalam LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan