Maison >développement back-end >C++ >Comment puis-je spécifier dynamiquement le champ OrderBy dans LINQ ?
Spécification dynamique des paramètres LINQ OrderBy
Dans les scénarios où vous devez spécifier dynamiquement les champs utilisés dans l'opération LINQ OrderBy, vous pouvez utiliser la technologie de réflexion pour y parvenir.
Exemple :
Supposons qu'il y ait une liste d'étudiants existingStudents
et un paramètre param
représentant le champ à trier.
<code class="language-csharp">List<student> existingStudents = new List<student> { ... }; string param = "City";</code>
Mise en œuvre standard :
La méthode par défaut appelle OrderBy avec un nom de propriété codé en dur pour le tri :
<code class="language-csharp">List<student> orderedByAddress = existingStudents.OrderBy(c => c.Address).ToList();</code>
Mise en œuvre dynamique :
En utilisant la réflexion, vous pouvez créer une expression dynamique :
<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string orderByProperty, bool desc) { // 确定排序表达式 string command = desc ? "OrderByDescending" : "OrderBy"; var type = typeof(T); 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<T>(resultExpression); }</code>
Utilisation :
Il est désormais possible de trier dynamiquement par n'importe quel attribut en utilisant la méthode d'extension OrderBy :
<code class="language-csharp">List<student> orderbyAddress = existingStudents.OrderBy("City", true); // 降序 List<student> orderbyName = existingStudents.OrderBy("Name", false); // 升序</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!