LinqToEntity的一些记事

在需要根据字符串来确定列名,而进行排序的时候,有几种方法:

1.用反射,优点是安全性高,可用性较强 缺点是性能比较慢 多级的时候比较麻烦

代码
        private static object GetValue<T>(T model, string field)
        {
            
if (field.Split('.').Length == 1)
                
return model.GetType().GetProperty(field).GetValue(model, null);

            
int index = field.IndexOf('.');
            
string f1 = field.Substring(0, index);
            
string f2 = field.Substring(index + 1);
            
object obj = model.GetType().GetProperty(f1).GetValue(model, null);
            
return GetValue(obj, f2);
        } 
var aa 
= result.ToList().OrderBy(x => GetValue(x, "XX")).ToList();

 

 

这个方法比较烦的是不能在query后面直接跟oderby一定要在list后面 这就导致大量数据要先读取出来再进行排序 很影响效率

 

2.用query的orderby

 var aa = result.OrderBy("it.XX.YY.OO").ToList(); 

  可以定义一个字典 然后根据传入的需要排序的字段的字符串进行转换成it.XX.YY.OO 这样无论几层都可以轻松搞定 缺点是可能性不强 可能有隐患

倒序的话 可以直接 在it.XX.YY.OO 后面加" desc"就可以了

 

3.比较麻烦的反射 还在研究中= =

 

 还有一个记事是ajax调用controller里的接口是不是参数一定要是id = =比较烦

posted on 2010-08-13 10:33  蓝炎蛮蛮  阅读(188)  评论(0编辑  收藏  举报

导航