如何在 LINQ 中动态指定 OrderBy 属性?
动态指定LINQ OrderBy参数
在C#中,LINQ的OrderBy方法允许根据指定的属性或表达式对数据进行排序。但是,我们如何动态地指定要排序的属性或表达式呢?
问题:
给定一个参数,我们希望根据指定的属性对学生列表进行排序,但目前,OrderBy调用中的属性名称是硬编码的。
示例:
List<Student> existingStudents = new List<Student> { new Student { ... }, new Student { ... } }; List<Student> orderByAddress = existingStudents.OrderBy(c => c.Address).ToList();
登录后复制
目标:
我们希望将属性名称作为参数,而不是在OrderBy中使用静态属性名称。
示例:
string param = "City"; List<Student> orderByCity = existingStudents.OrderBy(c => c.City).ToList(); //仍然需要明确指定属性
登录后复制
解决方案:
使用反射,我们可以动态构建OrderBy表达式:
public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string orderByProperty, bool desc) { // ... (反射代码构建表达式树) ... return source.Provider.CreateQuery<T>(resultExpression); }
登录后复制
然后,您可以按指定的属性动态排序:
existingStudents.OrderBy("City", true); // 降序 existingStudents.OrderBy("City", false); // 升序
登录后复制
(注意:完整的反射代码实现较为复杂,此处省略。 需要使用System.Linq.Expressions
命名空间来构建表达式树,并处理可能出现的异常,例如属性不存在的情况。) 该解决方案提供了动态排序的思路,完整的实现需要根据实际情况编写更健壮的代码。 直接使用c => param
是错误的,因为这只会对参数字符串本身排序,而不是对学生对象的属性排序。 必须使用反射来动态获取属性并构建正确的表达式树。
以上是如何在 LINQ 中动态指定 OrderBy 属性?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)