Maison > développement back-end > C++ > Comment puis-je spécifier dynamiquement la propriété Sort dans une clause LINQ OrderBy ?

Comment puis-je spécifier dynamiquement la propriété Sort dans une clause LINQ OrderBy ?

Barbara Streisand
Libérer: 2025-01-10 11:53:43
original
657 Les gens l'ont consulté

How Can I Dynamically Specify the Sort Property in a LINQ OrderBy Clause?

Utilisez des paramètres dynamiques pour personnaliser les expressions OrderBy dans LINQ

La méthode d'extension OrderBy de LINQ vous permet de trier une collection d'objets en fonction d'une ou plusieurs propriétés. Mais comment spécifier quelles propriétés trier en utilisant les valeurs transmises en paramètres ?

Contexte :

Le code suivant montre l'utilisation de base de OrderBy, où les propriétés sont codées en dur :

List<student> existingStudends = new List<student>{ new Student {...}, new Student {...}};
List<student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();
Copier après la connexion

Spécification d'attribut dynamique :

Afin de spécifier dynamiquement les propriétés à trier, vous pouvez tirer parti de la réflexion pour créer l'arborescence d'expression nécessaire. Voici une méthode d'extension qui implémente cette fonctionnalité :

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

orderByProperty est le nom de la propriété que vous souhaitez trier et desc détermine s'il faut trier par ordre décroissant (vrai) ou croissant (faux).

Utilisation :

En utilisant cette méthode d'extension, vous pouvez désormais trier dynamiquement selon n'importe quel attribut :

string param = "City";
List<student> orderbyAddress = existingStudends.OrderBy("City", true).ToList(); // 按城市降序排序
List<student> orderbyName = existingStudends.OrderBy("Name", false).ToList(); // 按名称升序排序
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!

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