首頁 > 後端開發 > C++ > 如何在 LINQ OrderBy 子句中動態指定排序屬性?

如何在 LINQ OrderBy 子句中動態指定排序屬性?

Barbara Streisand
發布: 2025-01-10 11:53:43
原創
600 人瀏覽過

How Can I Dynamically Specify the Sort Property in a LINQ OrderBy Clause?

使用動態參數自訂LINQ中的OrderBy表達式

LINQ 的 OrderBy 擴充方法可讓您根據一個或多個屬性對物件集合進行排序。但是,如何使用作為參數傳入的值來指定要排序的屬性呢?

背景:

以下程式碼展示了 OrderBy 的基本用法,其中屬性是硬編碼的:

<code class="language-csharp">List<student> existingStudends = new List<student>{ new Student {...}, new Student {...}};
List<student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();</code>
登入後複製

動態屬性指定:

為了動態指定要排序的屬性,您可以利用反射來建立必要的表達式樹。這是一個實作此功能的擴充方法:

<code class="language-csharp">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>
登入後複製

其中 orderByProperty 是您要排序的屬性名稱,desc 決定是按降序 (true) 排序還是按升序 (false) 排序。

用法:

使用此擴充方法,您現在可以動態地按任何屬性排序:

<code class="language-csharp">string param = "City";
List<student> orderbyAddress = existingStudends.OrderBy("City", true).ToList(); // 按城市降序排序
List<student> orderbyName = existingStudends.OrderBy("Name", false).ToList(); // 按名称升序排序</code>
登入後複製

以上是如何在 LINQ OrderBy 子句中動態指定排序屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板