linq 多条件查询 where 拼接+分页
2024-10-10 00:58:12
首先定义一个静态类
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;
}
最新文章
- React Native学习笔记之2
- mac linux 删除一个文件下边所有文件和文件夹
- kafka 命令行操作
- Java Spring DI之旅
- css中px,em和rem的区别
- 重构第23天 引用参数对象(Introduce Parameter Object)
- 删:[CentOS 7] 安装nginx
- jQuery插件开发(转)
- 随机森林——Random Forests
- 基础题:HDU 5122 K.Bro Sorting
- sql中with的用法(CTE公用表表达式):应用子查询嵌套,提高sql性能
- spring(IOC)动态代理
- UITapGestureRecognizer 的用法(轻触手势识别器)
- ARM汇编语言
- 我对git的认识
- npm 安装 electron 超时
- Java I/O系列汇总
- ZOJ-3230-Solving the Problems
- 用JS遍历循环时覆盖了之前的值
- 微软Azure平台 cloud service动态申请证书并绑定证书碰到的坑