Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memesan Keputusan LINQ Secara Dinamik Menggunakan OrderBy?

Bagaimana untuk Memesan Keputusan LINQ Secara Dinamik Menggunakan OrderBy?

Mary-Kate Olsen
Lepaskan: 2025-01-10 11:47:42
asal
164 orang telah melayarinya

How to Dynamically Order LINQ Results Using OrderBy?

Gunakan OrderBy untuk mengisih hasil LINQ secara dinamik

Soalan:

Bagaimana untuk menentukan secara dinamik parameter yang dihantar kepada kaedah OrderBy berdasarkan parameter?

Butiran:

Andaikan anda mempunyai senarai pelajar dan ingin mengisih mereka mengikut atribut tertentu. Pelaksanaan semasa menggunakan nama harta berkod keras, tetapi bagaimanakah cara saya menghantar nama harta sebagai parameter?

Contoh:

<code class="language-C#">string param = "City";
List<student> orderByAddress = existingStudents.OrderByDescending(c => param).ToList();</code>
Salin selepas log masuk

Penyelesaian:

Penyelesaian melibatkan membina pokok ekspresi secara dinamik menggunakan pantulan. Kaedah sambungan boleh dibuat seperti berikut:

<code class="language-C#">public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty,
                          bool desc) 
{
     string command = desc ? "OrderByDescending" : "OrderBy";
     var type = typeof(TEntity);
     var property = type.GetProperty(orderByProperty);
     var parameter = Expression.Parameter(type, "p");
     var propertyAccess = Expression.MakeMemberAccess(parameter, property);
     var orderByExpression = Expression.Lambda(propertyAccess, parameter);
     var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
                                   source.Expression, Expression.Quote(orderByExpression));
     return source.Provider.CreateQuery<TEntity>(resultExpression);
}</code>
Salin selepas log masuk
Parameter

orderByProperty mewakili nama atribut dan desc menentukan susunan pengisihan.

Penggunaan:

Anda kini boleh mengisih senarai pelajar anda secara dinamik:

<code class="language-C#">existingStudents.OrderBy("City", true); // 按城市降序排序
existingStudents.OrderBy("City", false); // 按城市升序排序</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan LINQ Secara Dinamik Menggunakan OrderBy?. 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