ホームページ >バックエンド開発 >C++ >文字列列名を使用して IQueryable を動的に並べ替える方法

文字列列名を使用して IQueryable を動的に並べ替える方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-14 10:56:41936ブラウズ

How to Dynamically Order IQueryable Using a String Column Name?

汎用拡張メソッドで IQueryable の文字列列名を使用した OrderBy

OrderBy を使用してクエリを並べ替える場合は、並べ替え式のタイプを指定する必要があります。ただし、場合によってはコンパイル時に型が不明なため、文字列列名を使用して並べ替えを適用することが困難になります。

この問題を解決するには、列名を文字列として受け取り、リフレクションに基づいて並べ替え式を動的に生成する汎用の拡張メソッドを作成できます。以下は修正コードのバージョンです:

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

この更新されたコードは、リフレクションを使用して、指定された列名に基づいてプロパティを取得し、動的な並べ替え式を作成します。これで次のように使用できるようになります:

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

ここで、「ColumnName」は並べ替える列の名前です。

提供された回答で示唆されているように、別のアプローチは、型と並べ替え式をパラメーターとして受け入れるカスタム拡張メソッドを使用することです。

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)
{
    var type = typeof(T);
    // ... (其余代码与之前相同)
}</code>
このメソッドは次のように使用できます:

<code class="language-csharp">var sortedQuery = query.OrderBy<T>("ColumnName");</code>
これら 2 つのメソッドのいずれかを使用すると、基になる型に関係なく、文字列列名を使用して IQueryable に動的に並べ替えを適用できます。

以上が文字列列名を使用して IQueryable を動的に並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。