Maison >développement back-end >C++ >Comment puis-je spécifier dynamiquement la propriété Sort dans une clause LINQ OrderBy ?
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 :
<code class="language-csharp">List<student> existingStudends = new List<student>{ new Student {...}, new Student {...}}; List<student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();</code>
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é :
<code class="language-csharp">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>
où 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 :
<code class="language-csharp">string param = "City"; List<student> orderbyAddress = existingStudends.OrderBy("City", true).ToList(); // 按城市降序排序 List<student> orderbyName = existingStudends.OrderBy("Name", false).ToList(); // 按名称升序排序</code>
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!