码迷,mamicode.com
首页 > 编程语言 > 详细

使用Linq动态排序

时间:2015-03-12 11:07:19      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

Linq排序很方便,如果能动态创建Expression再排序就更方便了。

  1. 正序还是倒序排列

    var order = typeof(Enumerable).GetMember(direction == ListSortDirection.Ascending ? "OrderBy" : "OrderByDescending")
                    .First() as MethodInfo;
    order = order.MakeGenericMethod(typeof(T), typeof(TKey));
  2. 创建表达式

    var entityParam = Expression.Parameter(typeof(T), "item");
    Expression columnExpr = Expression.Property(entityParam, TKeyPropertyInfo);
    var delegateType = typeof(Func<,>).MakeGenericType(typeof(T), TKeyPropertyType);//属性返回值类型
    var @delegate = Expression.Lambda(delegateType, columnExpr, entityParam).Compile();
  3. 执行

    var result = order.Invoke(null, new object[] { source, @delegate });
    

使用Linq动态排序

标签:

原文地址:http://www.cnblogs.com/beastplus/p/4331746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!