这里用反射不好。
1——
会影响运行效率
2——
假如是SQL LINQ的话,没办法转换为SQL语句
或许可以用下面的方案:
1——
在方法调用的时候传递一个Lamda表达式而不是传递属性名
2——
使用动态变量
3——
(这个方案跟你用反射其实类似了)使用动态变量的字典构建。
方法1.在bs场景下,是不行的,必须用Linq的话,怎么也逃不过这个反射的过程。排序字段名称到对象属性名称的映射始终是存在的。
方法2.动态变量,因为这是MVC里的一个Action,变通的代价也很高。
我想应该有个比较好的方法。有没有用动态Linq的?
@Zigzag: 只能用反射的话,通过查询的方式获取属性值便是最好的方案了。
allUsers.OrderBy(u => u.GetType().GetProperties().Where(p=>p.Name ==order).Single().GetValue(u, null));
当然,为了优化性能,也可以做个变通:
Type type = typeof(User); PropertyInfo p = type.GetProperties().Where(o=>o.Name==order).Single(); allUsers.OrderBy(u => p.GetValue(u, null));
@笨笨蜗牛: 谢谢您的解答,这主意不错,:)
@无之无: 报错,Lambda表达不认得p.GetValue方法
构建一个查询表达式,然后再去进行查询
可以考虑直接传表达式u => u.Name,u => u.id
这么小的问题把园长都引来了。鸡冻啊。谢谢您的回答,暂时我还是反射吧。