日期:2014-05-17  浏览次数:20827 次

list.orderby 动态指定排序列与类型

        public List<Abc> Get(string Order,string Sort)
        {
            //如果这样写,就默认是按ModuleTypeId进行ASC排序
            List<Abc> listAbc = Abc.GetAll().OrderBy(k => k.AbcId).ToList();
            return listAbc;

            //用什么办法可以根据传进来的Order参数确定排序的列,根据Sort确定排序类型?
        }





------解决方案--------------------
 public List<Abc> Get(string Order, string Sort)
{
    //如果这样写,就默认是按ModuleTypeId进行ASC排序
    List<Abc> listAbc = Abc.GetAll().OrderBy(k => string.Compare(Sort, "xxxxx") == 0 ? k.AbcId : k.ModuleTypeId).ToList();
    return listAbc;
}



------解决方案--------------------
http://www.cnblogs.com/xxfss2/archive/2010/12/13/1905023.html
------解决方案--------------------
本帖最后由 caozhy 于 2013-09-16 14:09:35 编辑
手写的,只是告诉你步骤和大概调用的方法,不保证正确。
var param = Expression.Parameter(typeof(ABC), "k");
var body = Expression.MakeMemberAccess(param, typeof(ABC).GetProperty(Sort));
var lambdaexpr = Expression.Lambda(param, body);
return List<Abc> listAbc = Abc.GetAll().OrderBy(lambdaexpr.Compile() as Func<Abc, ICompareable>).ToList();

------解决方案--------------------
linq 实现动态 orderby


class Pet  
{  
   public string Name{get;set;}  
   public int Age{get;set;}