Lambda - Orderby根据实体属性来进行可配置的排序

产品需求来产生技术提升,产品要求灵活的根据前端传过来的字段来进行可配置的排序,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);
        }
    }