OrderBy を使用してクエリを並べ替える場合は、並べ替え式のタイプを指定する必要があります。ただし、場合によってはコンパイル時に型が不明なため、文字列列名を使用して並べ替えを適用することが困難になります。
この問題を解決するには、列名を文字列として受け取り、リフレクションに基づいて並べ替え式を動的に生成する汎用の拡張メソッドを作成できます。以下は修正コードのバージョンです:
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); }
この更新されたコードは、リフレクションを使用して、指定された列名に基づいてプロパティを取得し、動的な並べ替え式を作成します。これで次のように使用できるようになります:
var sortedQuery = query.ApplySortFilter("ColumnName");
ここで、「ColumnName」は並べ替える列の名前です。
提供された回答で示唆されているように、別のアプローチは、型と並べ替え式をパラメーターとして受け入れるカスタム拡張メソッドを使用することです。
public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values) { var type = typeof(T); // ... (其余代码与之前相同) }
var sortedQuery = query.OrderBy<T>("ColumnName");
以上が文字列列名を使用して IQueryable を動的に並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。