linq 多条件查询 where 拼接+分页
首先定义一个静态类
public static class QueryAssembly
{
/// <summary>
/// 返回true
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Expression<Func<T, bool>> True<T>()
{
return f => true;
} /// <summary>
/// false
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Expression<Func<T, bool>> False<T>()
{
return f => false;
} /// <summary>
/// or
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="expr1"></param>
/// <param name="expr2"></param>
/// <returns></returns>
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
} /// <summary>
/// and
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="expr1"></param>
/// <param name="expr2"></param>
/// <returns></returns>
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
}
}
定义Page类
public class Paging<T>
{
/// <summary>
/// 当前页码
/// </summary>
[DataMember]
public int PageNo { get; set; } /// <summary>
/// 总页数
/// </summary>
[DataMember]
public int PageCount { get; set; } /// <summary>
/// 每页记录数
/// </summary>
[DataMember]
public int PageSize { get; set; } /// <summary>
/// 总记录数
/// </summary>
[DataMember]
public int RecordCount { get; set; } /// <summary>
/// 当前页的数据
/// </summary>
[DataMember]
public List<T> CurrentList { get; set; }
}
查询方法
public Paging<DAML> QueryAJML(int pageNo, int pageSize,DAML data)
{
Paging<DAML> result = null;
Expression<Func<DAML, bool>> ExpWhere = QueryAssembly.True<DAML>();
using (IStatelessSession session = _sessionFactory.OpenStatelessSession())
{
var queryDAML = session.Query<DAML>(); if (!string.IsNullOrEmpty(data.MLH))
{
ExpWhere=ExpWhere.Or(x=>x.MLH.Contains(data.MLH));
} if (!string.IsNullOrEmpty(data.QZH))
{
ExpWhere = ExpWhere.Or(x => x.MLH.Contains(data.QZH));
} //查询
queryDAML.Where(ExpWhere); //排序
queryDAML.OrderBy(x=>x.ID); //页数
result.PageNo = pageNo;
//每页记录数
result.PageSize = pageSize;
//总记录数
result.RecordCount = queryDAML.Count();
//总页数
result.PageCount = (result.RecordCount + result.PageSize - ) / result.PageSize;
//返回数据
result.CurrentList = new List<DAML>();
result.CurrentList = queryDAML.ToList();
}
return result;
}
linq 多条件查询 where 拼接+分页的更多相关文章
- linq 多条件查询
Linq 进行多条件查询的时候使用PredicateBuilder帮助类可以很好的解决. 类的源码: public static class PredicateBuilder { /// <su ...
- jsp 条件查询、列表分页
条件查询 dao //根据搜索条件筛选数据 public List<User> GetUserBySearch(String userName, String sex) throws SQ ...
- Linq in条件查询
Linq 实现sql中的not in和in条件查询 T-SQL的IN: Select ProductID, ProductName, CategoryID From dbo.Products Wh ...
- Mybatis plus中一个框多条件查询 SQL拼接
遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<& ...
- laravel多条件查询,及分页
$res = DtkModel::where('ID','>','1')->select("ID")->get()->paginate(20);//不成立 ...
- EntityFramework linq 多条件查询,不定条件查询
一.场景描述: 开发的时候,有些查询功能,往往查询的条件是不确定的,用户没有填的不参与到查询中去. 如图1所示,用户可能只要给根据名称来查询即可,有时候开始时间和结束时间并不需要填写. 图 1 二.解 ...
- [C#] Linq 动态条件查询
应用背景:以货品为例,在基础数据中配置货品的判断规则,要根据这个规则筛选出符合条件的集合. 创建货品类 public class Product { public string Name { get; ...
- php按条件查询的数据分页显示,点击下一页时又列出全部数据的解决办法
其实很简单,只要把表单提交方式改为get方式就行了,然后调用分页函数: function getpage(&$m,$where,$pagesize=10){ $m1=clone $m;//浅复 ...
- Linq 联合条件查询快捷方法
原方法: public ProductDC[] GetProductQueryCondition(ProductQueryConditionDC filter){//红色为原来的联合条件(之后下面的修 ...
随机推荐
- python模拟登录人人网
参考: http://www.cnblogs.com/txw1958/archive/2012/03/12/2392067.html http://www.cnblogs.com/chenyg32/a ...
- POJ 3279 Fliptile (质量不错)
题意:有一个M*N的棋盘,每一个格子只有两种状态0或1,每次可以选择一个格子执行翻转操作,并且与该格子相邻的4个格子都会被翻转,求将所有格子都翻转成0所需要的最小操作数,若有多种方案,输出字典序最小的 ...
- LINUX系统怎么关闭防火墙?
所谓防火墙指的是一个由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Int ...
- 【Java基础】Java中的持久属性集Properties
Properties 类的介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.一个属性列表可包含另一个属性列 ...
- HW5.15
public class Solution { public static void main(String[] args) { System.out.printf("%10s\t%10s\ ...
- HDOJ-ACM2035(JAVA) 人见人爱A^B
这道题的巧妙方法没有想出来,但是算是优化的暴力破解吧.Accepted import java.io.BufferedInputStream; import java.util.Scanner; pu ...
- nyoj 168 房间安排(区间覆盖)
房间安排 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 2010年上海世界博览会(Expo2010),是第41届世界博览会.于2010年5月1日至10月31日期间, ...
- jbpm4.4 demo1
package cn.itcast.a_helloworld; import java.util.List; import org.jbpm.api.Configuration; import org ...
- 在大型软件中用Word做报表: 书签的应用
本文转载:http://www.cnblogs.com/huyong/archive/2011/08/24/2151599.html 报表基本上在每一个项目中占有很大的比例,做报表也是我们开发人员必须 ...
- iOS 基础知识
1获取系统语言设置 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; NSArray *languages = ...