Maison > développement back-end > C++ > Comment trier dynamiquement les résultats LINQ à l'aide de OrderBy ?

Comment trier dynamiquement les résultats LINQ à l'aide de OrderBy ?

Mary-Kate Olsen
Libérer: 2025-01-10 11:47:42
original
121 Les gens l'ont consulté

How to Dynamically Order LINQ Results Using OrderBy?

Utilisez OrderBy pour trier dynamiquement les résultats LINQ

Question :

Comment spécifier dynamiquement les paramètres passés à la méthode OrderBy en fonction des paramètres ?

Détails :

Supposons que vous ayez une liste d'étudiants et que vous souhaitiez les trier selon un attribut spécifique. L'implémentation actuelle utilise des noms de propriétés codés en dur, mais comment transmettre les noms de propriétés en tant que paramètres ?

Exemple :

<code class="language-C#">string param = "City";
List<student> orderByAddress = existingStudents.OrderByDescending(c => param).ToList();</code>
Copier après la connexion

Solution :

La solution consiste à construire dynamiquement des arbres d'expression en utilisant la réflexion. Une méthode d'extension peut être créée comme suit :

<code class="language-C#">public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty,
                          bool desc) 
{
     string command = desc ? "OrderByDescending" : "OrderBy";
     var type = typeof(TEntity);
     var property = type.GetProperty(orderByProperty);
     var parameter = Expression.Parameter(type, "p");
     var propertyAccess = Expression.MakeMemberAccess(parameter, property);
     var orderByExpression = Expression.Lambda(propertyAccess, parameter);
     var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
                                   source.Expression, Expression.Quote(orderByExpression));
     return source.Provider.CreateQuery<TEntity>(resultExpression);
}</code>
Copier après la connexion
Le paramètre

orderByProperty représente le nom de l'attribut et desc détermine l'ordre de tri.

Utilisation :

Vous pouvez désormais trier votre liste d'étudiants de manière dynamique :

<code class="language-C#">existingStudents.OrderBy("City", true); // 按城市降序排序
existingStudents.OrderBy("City", false); // 按城市升序排序</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