本人新手刚在webform转到mvc   像linq  ef啥的,都是不会的不行不行的,不会就问群友,找资料

今天本屌遇到了一个分页组合查询的问题,解决了2个小时,把代码共享给大家

话不多话,直接上代码,理论上的东东我就不描述,初中没毕业文化太低也描述不了

新建一个表达式数的操作类

public static class PredicateBuilder
{ public static Expression<Func<T, bool>> True<T>() { return f => true; }
public static Expression<Func<T, bool>> False<T>() { return f => false; }
public static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge)
{
// build parameter map (from parameters of second to parameters of first)
var map = first.Parameters.Select((f, i) => new { f, s = second.Parameters[i] }).ToDictionary(p => p.s, p => p.f); // replace parameters in the second lambda expression with parameters from the first
var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body); // apply composition of lambda expression bodies to parameters from the first expression
return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters);
} public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
{
return first.Compose(second, Expression.And);
} public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
{
return first.Compose(second, Expression.Or);
}
} public class ParameterRebinder : ExpressionVisitor
{
private readonly Dictionary<ParameterExpression, ParameterExpression> map; public ParameterRebinder(Dictionary<ParameterExpression, ParameterExpression> map)
{
this.map = map ?? new Dictionary<ParameterExpression, ParameterExpression>();
} public static Expression ReplaceParameters(Dictionary<ParameterExpression, ParameterExpression> map, Expression exp)
{
return new ParameterRebinder(map).Visit(exp);
} protected override Expression VisitParameter(ParameterExpression p)
{
ParameterExpression replacement;
if (map.TryGetValue(p, out replacement))
{
p = replacement;
}
return base.VisitParameter(p);
}
}

基本的做好,下一步就是调用了

代码  下看

//获取页容量
int pageSize = FytRequest.GetFormInt("rows", );
//获取请求的页码
int pageIndex = FytRequest.GetFormInt("page", );
var key = FytRequest.GetFormStringEncode("key");
int statu = FytRequest.GetFormInt("statu");
var begintime = FytRequest.GetFormString("begintime");
var endtime = FytRequest.GetFormString("endtime");
var where = PredicateBuilder.True<tb_SystemLog>();
#region 组合查询
if (key!="")
{
where = where.And(m => m.loginName.Contains(key));
where = where.Or(m=>m.title.Contains(key));
}
if (statu!=-)
{
where = where.And(m=>m.logType==statu);
}
if (begintime != "" && endtime != "")
{
var bt = Convert.ToDateTime(begintime);
var et = Convert.ToDateTime(endtime);
where = where.And(m => m.addDate >= bt && m.addDate <= et);
}
#endregion
var dataList = OperateContext.BLLSession.Itb_SystemLogBLL.GetPagedList(pageIndex, pageSize, where, p => p.ID);
int rowCount = OperateContext.BLLSession.Itb_SystemLogBLL.GetListBy(where).Count();
var jsonM = new JsonHelper.JsonAjaxModel()
{
Data = dataList,
PageTotal = ,
Status = "ok"
};

ok好了,这样就可以用了,我这个分页内部是接口做的,

爽来的,我把分页实现也分享给大家,

#region 6.0 分页查询 + List<T> GetPagedList<TKey>
/// <summary>
/// 6.0 分页查询 + List<T> GetPagedList<TKey>
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">页容量</param>
/// <param name="whereLambda">条件 lambda表达式</param>
/// <param name="orderBy">排序 lambda表达式</param>
/// <returns></returns>
public List<T> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy)
{
// 分页 一定注意: Skip 之前一定要 OrderBy
return whereLambda == null ?
db.Set<T>().OrderBy(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList() :
db.Set<T>().Where(whereLambda).OrderBy(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
} #endregion

有些人可能看代码很熟悉,就不要拆穿了,你懂得

交流:86594082 有事情可以找我哈,共同学习

ASP.NETMVC4 分页组合查询解决方法的更多相关文章

  1. ASP.NET 分页+组合查询 练习

    分页和组合查询都是通过拼接SQL语句到数据库查询进行实现 到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers” ...

  2. Linq组合查询与分页组合查询结合

    1.组合查询 <div>姓名:<asp:TextBox ID="T1" runat="server"></asp:TextBox& ...

  3. webform:分页组合查询

    一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql"& ...

  4. 【2017-06-02】Linq高级查询,实现分页组合查询。

    1.以XXX开头 2.以XXX结尾 3.模糊查询 4.求个数 5.求最大值 6.求最小值 7.求平均值 8.求和 9.升序 10.降序 11.分页 Skip()跳过多少条 Take()取多少条 12. ...

  5. asp.net oracle 中文乱码 解决方法

    asp.net oracle 中文乱码 解决方法 不需要去修改oracle以及client的字符集,只需要在web.config中连接字符串上加上 Unicode=True 问题解决. <add ...

  6. 【php】thinkphp以post方式查询时分页失效的解决方法

    好久没有写博客了,最近说实话有点忙,各个项目都需要改bug.昨天晚上一直没有解决的php项目中的bug,就在刚才终于搞定,在这里还需要感谢博客园大神给的帮助! 具体问题描述 最近遇到一个非常棘手的问题 ...

  7. Webform--LinQ 分页组合查询

    一.linq高级查 1.模糊查(字符串包含) public List<User> Select(string name) { return con.User.Where(r => r ...

  8. 【分页问题】elasticsearch 深分页问题以及解决方法

    本文主要参考: 1.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html ...

  9. linq分页组合查询

    一.linq高级查 1.模糊查(字符串包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r = ...

随机推荐

  1. [转]DWZ表单验证规则一览表(留着自己用)

    <form onsubmit="return validateCallback(this)" class="pageForm" action=" ...

  2. 关于struts2.x中(警告: Could not find property [struts.valueStack])的解决方法

    出现“警告: Could not find property [struts.valueStack]”这样的问题,是由于少引用了log4j.jar包,不过,不引用也不影响使用.看个人的爱好了.

  3. python时间戳、日期、时间转换

    1.str转时间戳 # 字符类型的时间 tss1 = '2013-10-10 23:40:00' # 转为时间数组 timeArray = time.strptime(tss1, "%Y-% ...

  4. 学习python必备的学习网站

    Django框架学习必备网站: 官方网站   https://www.djangoproject.com/ 1.11版英文文档   https://docs.djangoproject.com/en/ ...

  5. etcd raft library

    https://github.com/coreos/etcd/tree/master/raft import "github.com/coreos/etcd/raft" ----- ...

  6. java算法 第七届 蓝桥杯B组(题+答案) 4.分小组

    4.分小组  (代码填空) 9名运动员参加比赛,需要分3组进行预赛.有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I下面的程序列出了所有的分组方法. 该程序的正常输出为:ABC DEF ...

  7. Activiti操作数据库中文乱码

    不要忘了修改数据库表的编码格式,除了数据库的编码格式要修改之外,数据库表的编码格式也要修改,修改为:

  8. 10 华电内部文档搜索系统 search03

    上一节讲解了怎么在Struts 2下面使用内置对象传值,在Struts 2下面是用Session或者Request存放对象.在Struts 2下面是用内部对象传值,和JSP页面下面稍微有些不同.但是实 ...

  9. kali linux:wireshark不能被root用户启用的解决方案

    启动wireshark后,报错: 该界面提示在init.lua文件中使用dofile函数禁用了使用超级用户运行wireshark.这是因为wireshark工具是使用Lua语言编写的,并且在kali ...

  10. C++ std::vector<bool>

    std::vector template < class T, class Alloc = allocator<T> > class vector; // generic te ...