首頁 >後端開發 >C++ >如何使用 OrderBy 動態排序 LINQ 結果?

如何使用 OrderBy 動態排序 LINQ 結果?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 11:47:42123瀏覽

How to Dynamically Order LINQ Results Using OrderBy?

使用OrderBy動態排序LINQ結果

問題:

如何根據參數動態指定傳遞給OrderBy方法的參數?

詳情:

假設您有一個學生列表,並希望按特定屬性對其進行排序。目前實作使用硬編碼屬性名稱,但是如何將屬性名稱作為參數傳遞呢?

範例:

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

解:

解決方案涉及使用反射動態建立表達式樹。可以建立一個擴充方法,如下所示:

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

orderByProperty 參數表示屬性名稱,desc 決定排序順序。

用法:

現在,您可以動態排序學生清單:

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

以上是如何使用 OrderBy 動態排序 LINQ 結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn