ホームページ > バックエンド開発 > C++ > 一般的な列名を使用して IQueryable の OrderBy を拡張するにはどうすればよいですか?

一般的な列名を使用して IQueryable の OrderBy を拡張するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-14 09:40:44
オリジナル
731 人が閲覧しました

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 を受け入れます。指定された列名とラムダ式に基づいて式を動的に生成します。次に、結果の式を使用して、OrderBy メソッドを呼び出す MethodCallExpression を作成します。

最後に、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート