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
Mary-Kate Olsenasal
2025-01-10 11:47:42123semak imbas

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>

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>
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>

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!

Kenyataan:
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