首頁 > 後端開發 > C++ > 如何使用字串列名動態排序 IQueryable?

如何使用字串列名動態排序 IQueryable?

Susan Sarandon
發布: 2025-01-14 10:56:41
原創
972 人瀏覽過

How to Dynamically Order IQueryable Using a String Column Name?

在泛型擴充方法中使用字串列名對 IQueryable 進行 OrderBy 排序

使用 OrderBy 對查詢進行排序時,必須指定排序表達式的類型。但是,在某些情況下,編譯時可能無法知道該類型,這使得使用字串列名應用排序變得具有挑戰性。

為了克服這個問題,我們可以建立一個泛型擴充方法,該方法接收列名作為字串,並基於反射動態產生排序表達式。以下是修改後的程式碼版本:

1

2

3

4

5

6

7

8

9

<code class="language-csharp">public static IQueryable<T> ApplySortFilter<T>(this IQueryable<T> query, string columnName)

{

    var type = typeof(T);

    var property = type.GetProperty(columnName);

    var parameter = Expression.Parameter(type, "o");

    var propertyAccess = Expression.MakeMemberAccess(parameter, property);

    var sortExpression = Expression.Lambda(propertyAccess, parameter);

    return query.OrderBy(sortExpression);

}</code>

登入後複製

此更新後的程式碼使用反射根據提供的列名檢索屬性,從而建立動態排序表達式。現在您可以如下使用它:

1

<code class="language-csharp">var sortedQuery = query.ApplySortFilter("ColumnName");</code>

登入後複製

其中,「ColumnName」是要排序的欄位的名稱。

正如提供的答案中所建議的那樣,另一種方法是使用一個自訂擴展方法,該方法接受類型和排序表達式作為參數:

1

2

3

4

5

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)

{

    var type = typeof(T);

    // ... (其余代码与之前相同)

}</code>

登入後複製

此方法可以如下使用:

1

<code class="language-csharp">var sortedQuery = query.OrderBy<T>("ColumnName");</code>

登入後複製

透過使用這兩種方法中的任何一種,您可以使用字串列名動態地對 IQueryable 應用排序,而不管底層類型是什麼。

以上是如何使用字串列名動態排序 IQueryable?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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