Maison > développement back-end > C++ > Comment trier dynamiquement IQueryable à l'aide d'un nom de colonne de chaîne ?

Comment trier dynamiquement IQueryable à l'aide d'un nom de colonne de chaîne ?

Susan Sarandon
Libérer: 2025-01-14 10:56:41
original
933 Les gens l'ont consulté

How to Dynamically Order IQueryable Using a String Column Name?

OrderBy en utilisant le nom de la colonne de chaîne sur IQueryable dans la méthode d'extension générique

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Cette méthode peut être utilisée comme suit :

<code class="language-csharp">var sortedQuery = query.OrderBy<T>("ColumnName");</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal