Lorsque vous utilisez OrderBy pour trier une requête, vous devez spécifier le type de l'expression de tri. Cependant, dans certains cas, le type peut ne pas être connu au moment de la compilation, ce qui rend difficile l'application du tri à l'aide de noms de colonnes de chaînes.
Pour surmonter ce problème, nous pouvons créer une méthode d'extension générique qui reçoit le nom de la colonne sous forme de chaîne et génère dynamiquement l'expression de tri basée sur la réflexion. Voici la version du code modifiée :
<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>
Ce code mis à jour utilise la réflexion pour récupérer les propriétés en fonction des noms de colonnes fournis, créant ainsi une expression de tri dynamique. Vous pouvez désormais l'utiliser comme suit :
<code class="language-csharp">var sortedQuery = query.ApplySortFilter("ColumnName");</code>
Où "ColumnName" est le nom de la colonne à trier.
Comme suggéré dans la réponse fournie, une autre approche consiste à utiliser une méthode d'extension personnalisée qui accepte le type et l'expression de tri comme paramètres :
<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values) { var type = typeof(T); // ... (其余代码与之前相同) }</code>
Cette méthode peut être utilisée comme suit :
<code class="language-csharp">var sortedQuery = query.OrderBy<T>("ColumnName");</code>
En utilisant l'une ou l'autre de ces deux méthodes, vous pouvez appliquer dynamiquement un tri à un IQueryable en utilisant des noms de colonnes de chaîne, quel que soit le type sous-jacent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!