LINQ 通过动态生成lambda表达式,实现根据指定属性名称对序列进行排序
来源:互联网 发布:图像处理常用滤波算法 编辑:程序博客网 时间:2024/05/22 06:45
目前,对于Linq只是初步接触,还不熟悉,做项目的时候想到一个问题,如果想要查询任意字段的排序结果集,该怎么实现?
我们知道,T-SQL是非常容易解决这个问题,只要简单通过拼接T-SQL就可以达到该效果。
那么,Linq该怎么实现呢?
网上查了很多资料,找到一种办法就是通过自定义拓展方法方式实现,具体实现代码如下:
/// <summary> /// 根据指定属性名称对序列进行排序 /// </summary> /// <typeparam name="TSource">source中的元素的类型</typeparam> /// <param name="source">一个要排序的值序列</param> /// <param name="property">属性名称</param> /// <param name="descending">是否降序</param> /// <returns></returns> public static IQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> source, string property, bool descending) where TSource : class { ParameterExpression param = Expression.Parameter(typeof(TSource), "c"); PropertyInfo pi = typeof(TSource).GetProperty(property); MemberExpression selector = Expression.MakeMemberAccess(param, pi); LambdaExpression le = Expression.Lambda(selector, param); string methodName = (descending) ? "OrderByDescending" : "OrderBy"; MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName, new Type[] { typeof(TSource), pi.PropertyType }, source.Expression, le); return source.Provider.CreateQuery<TSource>(resultExp); }
调用如下:
using (Entities entitys = new Entities()) { var lists = Kits.OrderBy(entitys.Members.Where(n => true), "MemberId", true).ToList(); }
执行结果如下:
当然,你也可以加多点查询条件,只要稍微修改下就可以了
其他参考:使用Expression动态创建lambda表达式
http://bbs.csdn.net/topics/390773344
Expression.Call 方法 (Type, String, Type[], Expression[])
IQueryProvider.CreateQuery 方法 (Expression)
http://www.cnblogs.com/126/archive/2007/09/09/887723.html
阅读全文
0 0
- LINQ 通过动态生成lambda表达式,实现根据指定属性名称对序列进行排序
- LINQ 根据指定属性名称对序列进行排序
- 实体类实现根据指定属性进行排序
- C# 中使用Linq和Lambda表达式对List<T>进行排序
- C# 中使用LINQ和LAMBDA表达式对LIST进行多字段排序
- postgresql根据指定序列进行自定义排序
- 根据对象属性对数组进行排序
- 动态LINQ(Lambda表达式)构建
- php数组根据指定字段对数组进行排序函数
- 根据类中的某个属性对类进行排序
- Java 对 List 内对象根据对象属性进行排序
- 根据某一属性对数组中的对象进行排序
- Linq使用Lambda表达式实现某列去重
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- Lambda表达式和Linq实现数据集的简单筛选并排序
- 【spring】事务管理之声明式事务
- Android对接支付宝移动支付始终无法成功调用H5PayActivity
- 十个商标侵权典型案例 保护知识产权刻不容缓
- 设计模式10-责任链模式
- 走进OpenStack
- LINQ 通过动态生成lambda表达式,实现根据指定属性名称对序列进行排序
- string.Empty与"",null的区别,用哪个更好呢?
- java 导入包
- 常用的mysql命令笔记
- Oracle安装时先决条件检查失败的解决方案
- Hibernate使用JPA注解声明一个PO类
- 遮罩层 兼容IE
- Cloudera集群初始搭建
- Android中使用RecyclerView + SnapHelper实现类似ViewPager效果