首页 > 后端开发 > C++ > 如何使用 OrderBy 动态排序 LINQ 结果?

如何使用 OrderBy 动态排序 LINQ 结果?

Mary-Kate Olsen
发布: 2025-01-10 11:47:42
原创
198 人浏览过

How to Dynamically Order LINQ Results Using OrderBy?

使用OrderBy动态排序LINQ结果

问题:

如何根据参数动态指定传递给OrderBy方法的参数?

详情:

假设您有一个学生列表,并希望按特定属性对其进行排序。当前实现使用硬编码属性名称,但是如何将属性名称作为参数传递呢?

示例:

string param = "City";
List<student> orderByAddress = existingStudents.OrderByDescending(c => param).ToList();
登录后复制

解决方案:

解决方案涉及使用反射动态构建表达式树。可以创建一个扩展方法,如下所示:

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);
}
登录后复制

orderByProperty 参数表示属性名称,desc 确定排序顺序。

用法:

现在,您可以动态排序学生列表:

existingStudents.OrderBy("City", true); // 按城市降序排序
existingStudents.OrderBy("City", false); // 按城市升序排序
登录后复制

以上是如何使用 OrderBy 动态排序 LINQ 结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板