使用Entity Framework时,如何构建动态排序条件
2011-04-25 14:52
399 查看
/// <summary> /// 分页查询 /// </summary> /// <param name="query"></param> /// <param name="start"></param> /// <param name="limit"></param> /// <param name="sort">排序字段</param> /// <param name="dir">ASC/DESC</param> /// <param name="count">总纪录数</param> /// <returns></returns> public List<T> PageList(IQueryable<T> query, int start, int limit, string sort, string dir, out int count) { if (string.IsNullOrEmpty(sort)) throw new Exception("使用此方法,必须指定排序字段!"); ParameterExpression param = Expression.Parameter(typeof(T), "it"); Expression body = param; if (Nullable.GetUnderlyingType(body.Type) != null) body = Expression.Property(body, "Value"); PropertyInfo sortProperty = typeof(T).GetProperty(sort, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (sortProperty == null) throw new Exception("对像上不存在" + sortProperty + "的字段"); body = Expression.MakeMemberAccess(body, sortProperty); LambdaExpression keySelectorLambda = Expression.Lambda(body, param); string queryMethod = dir == "DESC" ? "OrderByDescending" : "OrderBy"; query = query.Provider.CreateQuery<T>(Expression.Call(typeof(Queryable), queryMethod, new Type[] { typeof(T), body.Type }, query.Expression, Expression.Quote(keySelectorLambda))); count = query.Count(); if (start >= 0 && limit > 0) query = query.Skip(start).Take(limit); return query.ToList(); }
相关文章推荐
- 使用表达式树动态构建Linq查询条件来实现单个实体动态查询
- 使用redis如何实现动态时间段内统计排序?
- ADF:如何使用VO处理查询条件的值属于某一动态值列表的问题
- 使用自定义Comparator对TreeSet中的数据进行多条件排序
- [转载]使用 PHP 构建的 Web 应用如何避免 XSS 攻击
- 如何使用netfilter/iptables构建防火墙
- 使用数组动态赋值SQL IN ()条件
- 如何使用ajax接受json返回的字符串数组,并动态异步显示到超链接的下面
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
- Docker学习笔记-- 如何使用Dockerfile构建镜像
- 如何进行SQL性能优化?-使用动态管理视图和函数
- PHP与MySQL数据库中排序的对比及使用条件详解
- 如何使用光盘构建yum仓库
- Eclipse 使用 Maven 构建动态 Web 工程,默认无 java 目录的解决方法
- js:数组重排序问题:如何使用sort()方法按数值的大小进行升序或降序排列
- 如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
- 如何使用CCRenderTexture创建动态纹理 Cocos2d-x 2.1.4
- 使用 PHP 构建的 Web 应用如何避免 XSS 攻击
- 如何进行ibatis动态多条件组合查询以及模糊查询
- 如何使用GitLab和Rancher构建CI/CD流水线 – Part 2