产品需求来产生技术提升,产品要求灵活的根据前端传过来的字段来进行可配置的排序,Orderby( e => e.?)
orderby方法中是传递一个委托方法,返回一个Object对象,默认就是我们进行排序的属性字段值,所以我们也可以灵活使用这块委托方法,只要能返回对应属性的值就可以让这个表达式成立。
我们可以通过反射,将传过来的参数变量动态获取该属性的值,然后返回给表达式,就能达到原来orderby的效果了。实现代码如下
class Program { public static void Main(string[] args) { List<Employee> data = new List<Employee>() { new Employee() { ID = 1, Age = 22, Name = "阿飞", Sex = 'm' }, new Employee() { ID = 1, Age = 12, Name = "阿飞", Sex = 'm' }, new Employee() { ID = 2, Age = 23, Name = "阿飞", Sex = 'm' }, }; var datanew = data.OrderByDescending(e => GetPropertyValue(e, "Age")); Console.WriteLine(JsonConvert.SerializeObject(datanew)); Console.ReadKey(); } private static object GetPropertyValue(object obj, string property) { PropertyInfo propertyInfo = obj.GetType().GetProperty(property); return propertyInfo.GetValue(obj, null); } }