System.Reflection.PropertyInfo prop = typeof(YourType).GetProperty("PropertyName");
query = query.OrderBy(x => prop.GetValue(x, null));
这样可以避免重复调用反射API以获取该属性。现在唯一的重复调用就是获取值。
我主张使用a PropertyDescriptor
代替,因为这将允许将customTypeDescriptor
分配给您的类型,从而使轻量级操作可以检索属性和值。在缺少自定义描述符的情况下,无论如何它都会退回去反映。
PropertyDescriptor prop = TypeDescriptor.GetProperties(typeof(YourType)).Find("PropertyName");
query = query.OrderBy(x => prop.GetValue(x));
至于加快速度,请HyperDescriptor
在CodeProject上查看Marc Gravel的项目。我已经成功地使用了它;它是针对业务对象进行高性能数据绑定和动态属性操作的救生器。