首頁 >後端開發 >C++ >如何使用通用列名擴充 IQueryable 的 OrderBy?

如何使用通用列名擴充 IQueryable 的 OrderBy?

Linda Hamilton
Linda Hamilton原創
2025-01-14 09:40:44688瀏覽

How Can I Extend IQueryable's OrderBy with Generic Column Names?

使用泛型列名擴充 IQueryable 的 OrderBy 方法

本文探討如何透過一個泛型擴充方法來增強 IQueryable,使其能夠根據給定的字串列名進行排序。

考慮以下擴充方法:

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

為了實現排序功能,我們需要使用給定的列名建立一個表達式。然而,我們遇到了一個問題:從表達式推斷出的排序類型與 OrderBy 方法所需的類型不符。

由於排序類型 TSortColumn 只能在運行時確定,這帶來了挑戰。但是,有一個解決方案。

提供的程式碼範例示範了一種類似的方法:

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

此方法接受一個字串參數 ordering,表示列名。它根據指定的列名和 Lambda 表達式動態產生一個表達式。產生的表達式隨後用於建立一個 MethodCallExpression,該表達式呼叫 OrderBy 方法。

最後,source.Provider.CreateQuery<T> 被調用,用於返回已排序的 IQueryable。

修改:用於降序排序:

<code class="language-csharp">MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));</code>

以上是如何使用通用列名擴充 IQueryable 的 OrderBy?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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