linq 多条件查询 where 拼接+分页

首先定义一个静态类

 1 public static class QueryAssembly
 2     {
 3         /// <summary>
 4         /// 返回true
 5         /// </summary>
 6         /// <typeparam name="T"></typeparam>
 7         /// <returns></returns>
 8         public static Expression<Func<T, bool>> True<T>()
 9         {
10             return f => true;
11         }
12
13         /// <summary>
14         /// false
15         /// </summary>
16         /// <typeparam name="T"></typeparam>
17         /// <returns></returns>
18         public static Expression<Func<T, bool>> False<T>()
19         {
20             return f => false;
21         }
22
23         /// <summary>
24         /// or
25         /// </summary>
26         /// <typeparam name="T"></typeparam>
27         /// <param name="expr1"></param>
28         /// <param name="expr2"></param>
29         /// <returns></returns>
30         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
31         {
32             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
33             return Expression.Lambda<Func<T, bool>>
34                   (Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
35         }
36
37         /// <summary>
38         /// and
39         /// </summary>
40         /// <typeparam name="T"></typeparam>
41         /// <param name="expr1"></param>
42         /// <param name="expr2"></param>
43         /// <returns></returns>
44         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,Expression<Func<T, bool>> expr2)
45         {
46             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
47             return Expression.Lambda<Func<T, bool>>
48                   (Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
49         }
50     }

查询方法

 1 public Paging<DAML> QueryAJML(int pageNo, int pageSize,DAML data)
 2         {
 3             Paging<DAML> result = null;
 4             Expression<Func<DAML, bool>> ExpWhere = QueryAssembly.True<DAML>();
 5             using (IStatelessSession session = _sessionFactory.OpenStatelessSession())
 6             {
 7                 var queryDAML = session.Query<DAML>();
 8
 9                 if (!string.IsNullOrEmpty(data.MLH))
10                 {
11                     ExpWhere=ExpWhere.Or(x=>x.MLH.Contains(data.MLH));
12                 }
13
14                 if (!string.IsNullOrEmpty(data.QZH))
15                 {
16                     ExpWhere = ExpWhere.Or(x => x.MLH.Contains(data.QZH));
17                 }
18
19                 //查询
20                 queryDAML.Where(ExpWhere);
21
22                 //排序
23                 queryDAML.OrderBy(x=>x.ID);
24
25                 //页数
26                 result.PageNo = pageNo;
27                 //每页记录数
28                 result.PageSize = pageSize;
29                 //总记录数
30                 result.RecordCount = queryDAML.Count();
31                 //总页数
32                 result.PageCount = (result.RecordCount + result.PageSize - 1) / result.PageSize;
33                 //返回数据
34                 result.CurrentList = new List<DAML>();
35                 result.CurrentList = queryDAML.ToList();
36             }
37             return result;
38         }
时间: 2024-10-12 04:00:21

linq 多条件查询 where 拼接+分页的相关文章

必须知道的sql编写技巧。多条件查询不拼接字符串&#183;的写法

在做项目中,我们经常遇到复杂的查询方法,要根据用户的输入,判断某个参数是否合法,合法的话才能当作过滤条件,我们通常的做法是把查询SQL赋值给一个字符串变量,然后根据判断条件动态的拼接where条件进行查询.下面来简单说一下写SQL中遇到的问题和解决办法.  一.不确定字段名,而产生的SQL字符串拼接 比如,有个公司要做一个系统,要支持多语言,这个时候我们就要将语音信息存储在数据库中.然后,根据客户选择查询对应的语言字段,进行显示.下面我们来模拟这个场景,打开SQL Server,新建SysLan

linq 多条件查询

Linq 进行多条件查询的时候使用PredicateBuilder帮助类可以很好的解决. 类的源码: public static class PredicateBuilder { /// <summary> /// 应用True时:单个AND有效,多个AND有效:单个OR无效,多个OR无效:混合使用时写在AND后的OR有效 /// </summary> /// <typeparam name="T"></typeparam> /// &l

mybatis逆向工程带条件查询用PageHelper分页插件出错

问题: There is no getter for property named '__frch_criterion_1' in 'class com.××.××.TbContentExample'.可是我并没有定义这个变量. 代码如下: //执行查询 TbContentExample example = new TbContentExample(); Criteria criteria = example.createCriteria(); criteria.andCategoryIdEqu

Mybatis plus中一个框多条件查询 SQL拼接

遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<>(); String queryStr = QueryUtils.toFuzzyQueryStr(username.toString()); String filterSql = "(username like '" + queryStr+"' or username li

linq多条件查询

这是一个方法,返回IList<AtAGlanceDetail> public IList<AtAGlanceDetail> GetAtAGlanceReportByCondition(int? supplierId, string container, DateTime? ETA, string FOBPoint, string HBLNum, DateTime? motherVesselETD, string voyage) { var data = GetAll().Where

[C#] Linq 动态条件查询

应用背景:以货品为例,在基础数据中配置货品的判断规则,要根据这个规则筛选出符合条件的集合. 创建货品类 public class Product { public string Name { get; set; } public string Code { get; set; } public string Unit { get; set; } } 主要实现方法 public void GetProducts() { #region 创建List 实际应用从数据库中取值 var products

php按条件查询的数据分页显示,点击下一页时又列出全部数据的解决办法

其实很简单,只要把表单提交方式改为get方式就行了,然后调用分页函数: function getpage(&$m,$where,$pagesize=10){ $m1=clone $m;//浅复制一个模型 $count = $m->where($where)->count();//连惯操作后会对join等操作进行重置 $m=$m1;//为保持在为定的连惯操作,浅复制一个模型 $p=new Think\Page($count,$pagesize); $p->lastSuffix=fa

转 --简单解决Linq多条件组合问题

本文笔者用清晰的实例,解决了Linq多条件问题,思路十分的清晰,笔者也很细心的做了描述,希望能给你带来帮助. 最近有个项目准备功能改版,师兄吩咐:尽可能地做到万般皆Linq,所以很多东西都要从存储过程搬过来..昨天写评价功能的时候,碰到个Linq多条件叠加组合的问题,其需求如下: 多种查询评价的条件: 1.Linq多条件之查询类型: 收到的评价_买家给我的评价,收到的评价_卖家给我的评价,给出的评价_我给买家的评价,给出的评价_我给卖家的评价 public enum OpinionSearchT

2017-5-25 分页加条件查询合体

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server&quo