Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memesan Keputusan LINQ Secara Dinamik Menggunakan 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!