使用Linq动态排序

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 });
    
时间: 2024-10-11 12:58:02

使用Linq动态排序的相关文章

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序

首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为sort这个名称填写错误,会导致后台一直无法获取datagrid的排序字段 本来是没有这一讲的,为了使20行的代码精简成2行,我查阅了一些资料,借鉴了一些大神的建议,首先感谢第八讲中,11楼@nyth和15楼@红颜醉丶帝的建议投递,每一次的的排序要都一个判断这的确很麻烦,我们利用反射来解决这个问题. 先看原来的代码 //排序 if (pager.order == "desc") { switch (pager

Linq 动态查询排序

Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip(0).Take(10); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query.OrderBy(x=>x.GetType().GetField("Tel")).Skip(0).Take(10); 上面的写法是无法编译通过的,此路不通,于是找到一个order扩展类: 1 using System; 2 using System.Linq; 3 using

zTree初体验--MVC linq动态多条件OR查询

工作需要,使用zTree实现了一个点击显示下拉复选框列表选中项作为查询条件的功能.简单记录下菜鸟级开发历程. zTree:是一个依靠jQuery实现的多功能树控件.通过简单引用配置就可使用. 具体使用: (1).脚本.样式引用 注意:引用顺序,zTree.js一定放最后. <link rel="stylesheet" href="@Url.Content("~/Scripts/jquery.plugins/zTree/zTreeStyle.css")

函数指针、回调、动态排序、返回函数指针

1.函数指针定义及初始化: int (*p)(int,int)=NULL; p=maxValue;//将函数maxValue的地址传给p 或 (*p)=maxValue; 2.函数回调: int getValue(int a,int b,int (*p)(int,int));//函数指针作为getValue的参数 函数指针指向函数可变 3.动态排序(排序条件多变) 将决定排序方式的条件封装成函数,然后再回调 typedef BOOL (*P_Fun)(int,int);//头文件#include

解析---DragGridView长按动态排序

曾经项目需求,要实现一个类似以前ZAKER新闻阅读的DragGridView特效.不过,没要求实现横向跨屏,而是竖向跨屏.网上资源也很多,有实现横向跨屏的,可是没有找到竖向的.后来只好结合人家代码,修改一二. 贴代码! /** * @blog http://blog.csdn.net/xiaanming * * @author xiaanming&&wangxuanao * */ public class DragGridView extends GridView { /** * Drag

实现动态排序

/// <summary> /// 实现动态排序 /// 来源博客园的一个大神,具体实现原理是利用实体和排序字段自动生成一个表达式 /// 再利用IQuerable的方法实现 /// 有一部分比较像微软的源码 ZhangQC 2016.10.20 /// </summary> public static class DynamicOrder { #region Private 表达式树 /// <summary> /// 构建表达式树 结果类似于 j=>j.Nam

ActiveReports 报表应用教程 (9)---交互式报表之动态排序

原文:ActiveReports 报表应用教程 (9)---交互式报表之动态排序 在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取.过滤等功能可以让用户更方便地分析报表数据. 1.创建报表文件 在应用程序中创建一个名为 rptProductListForSort.rdlx 的 ActiveReports 报表文件,使用的项目模板为 ActiveReports 页面报表,创建完成之后从 V

php sortable 动态排序

php sortable 动态排序未分页版.php 预览图: <?php mysql_connect("localhost","root","root"); mysql_select_db("test"); mysql_query("SET CHARACTER SET GB2312"); if($_POST["reorder"]){ $i=1; foreach ($_POST[&q

利用动态排序,对学生结构体的各类信息进行排序

#import <Foundation/Foundation.h> //创建一个学生变量 typedef struct student{ char name[20];  //姓名 int  age;       //年龄 float  weight;  //体重 float  height;  //身高 float  score;   //分数 }Stu; //为什么使用动态排序,动态排序的好处:所有的排序函数if语句之后的比较条件不一样,其余的所有代码都是相同的,把相同的内容放在一个函数里,