Maison > développement back-end > C++ > Comment puis-je étendre OrderBy d'IQueryable avec des noms de colonnes génériques ?

Comment puis-je étendre OrderBy d'IQueryable avec des noms de colonnes génériques ?

Linda Hamilton
Libérer: 2025-01-14 09:40:44
original
718 Les gens l'ont consulté

How Can I Extend IQueryable's OrderBy with Generic Column Names?

Étendre la méthode OrderBy d'IQueryable avec des noms de colonnes génériques

Cet article explique comment améliorer IQueryable avec une méthode d'extension générique afin qu'il puisse être trié en fonction d'un nom de colonne de chaîne donné.

Considérez les méthodes d'extension suivantes :

1

2

<code class="language-csharp">public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName)

    where T : EntityObject</code>

Copier après la connexion

Afin d'implémenter la fonction de tri, nous devons créer une expression utilisant le nom de colonne donné. Cependant, nous avons rencontré un problème : le type de classement déduit de l'expression ne correspondait pas au type requis par la méthode OrderBy.

Cela présente un défi puisque le type de tri TSortColumn ne peut être déterminé qu'au moment de l'exécution. Il existe cependant une solution.

L'exemple de code fourni démontre une approche similaire :

1

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)</code>

Copier après la connexion

Cette méthode accepte un paramètre de chaîne ordering, qui représente le nom de la colonne. Il génère dynamiquement une expression basée sur le nom de colonne spécifié et l'expression Lambda. L'expression résultante est ensuite utilisée pour créer un MethodCallExpression qui appelle la méthode OrderBy.

Enfin, source.Provider.CreateQuery<T> est appelé pour renvoyer le IQueryable trié.

Modification : Pour un tri décroissant :

1

<code class="language-csharp">MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));</code>

Copier après la connexion

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