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