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 サイトの他の関連記事を参照してください。