在asp.net core、asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选、过滤、LInq配合Ef.core进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询,加上Any和Contains进行进一步处理

在linq中各种条件表达式可能写的巨长而且过几天自己都看不懂了,这个可以可以使操作变得简单易懂并用在各种地方,我举例一部分

       public async Task<IActionResult> List(Model filter)
{
var express = PredicateBuilder.New<Result>() //这里Result是我们定义的实体类,必须与下面where条件的类型一致 //简化为 where(id==filter.id)直接等于相当于精准查询
.And(x => filter.Id == 0 || x.Id == filter.Id) //简化为where(id==filter.id and name==filter.name)输出的时候为where(id=1 and name='大帅逼')
//contains是模糊查询 简化为 name link %大帅逼%
.And(x => string.IsNullOrEmpty(filter.Name) || x.Name.Contains(filter.Name)) //类似上述,深入查询也是可以模糊查找的, Any有点难度可以理解为foreach循环 foreach(var t Data){t.user}
.And(x => x.Data.Any(t => t.User.Any(s => s.Content.Contains(filter.Content)))) //当然字符串也可以精准查找数据
.And(x => x.Title==filter.Title) //跨表查询或者说深入查询也可以精准查找
.And(x => x.Data.Any(t => t.Title=filter.Title)); //使用起来就是加载条件里面就可以了
List<Result> ModelList=new List<Result>();
ModelList.where(express); 当我们使用EF的时候也是可以用的,其他方法也是可以用的
var result=Query.where(express);
}
//当我们使用 efcore ,ling查询数据库的时候也可以用 这是缩写
public virtual IQueryable<Result> Query<T>(Expression<Func<Result, bool>> predicate)
{
return DbContext.Set<Result>().Where(predicate);
} 如果需要EF这块知识的请点击下方链接

如果需要EF这块请点击:https://www.cnblogs.com/liaote/p/15411880.html

      最后统一成 

   public async Task<IActionResult> List(Model filter)
{
var express = PredicateBuilder.New<Result>()
.And(x => filter.Id == 0 || x.Id == filter.Id)
.And(x => string.IsNullOrEmpty(filter.Name) || x.Name.Contains(filter.Name))
.And(x => x.Data.Any(t => t.User.Any(s => s.Content.Contains(filter.Content))))
.And(x => x.Title==filter.Title)
.And(x => x.Data.Any(t => t.Title=filter.Title)); List<Result> ModelList=new List<Result>();
ModelList.where(express);

综上所述简化出来细说一条一条理解

var express = PredicateBuilder.New<Result>() 理解如下

 PredicateBuilder中还有很多不只是new 也有PredicateBuilder.True
PredicateBuilder.Or 等可以自己尝试
//<result>改成自己集合或者数组的实体类名 ,只要命名和需要筛选的名字一致就可以 //当然也可以直接给集合或者数组进行筛选判断
var express = PredicateBuilder.New<string>()
And(x => x.Contains(filter.Name));
//然后就可以使用了 List<string> data.where(express)//例子
 .And(x => filter.Id == 0 || x.Id == filter.Id)理解如下

//使用了lamdba表达式来定义,x=>x.id 的意思是实例化一下当前类
//然后就跟sql语句一样 id=id来判断

.And(x => x.Data.Any(t => t.Title=filter.Title))理解如下还有  Any和Contains 的用法

//Any的意思简化可以理解为
foreach(var x in Data)
{
return x.title==title
} Contains可以理解为sql里面的模糊查询 例子:我是大帅逼服不服
where title link %大帅逼%

%是指模糊,前面的%放前面就是前面的要查,不加就不查,放后面就后面的也查同理

最后使用 最简单 list.where(express )

如果需要EF这块请点击:https://www.cnblogs.com/liaote/p/15411880.html

希望上述能帮到你

Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询的更多相关文章

  1. ASP.NET Core 3.1 Razor 视图预编译、动态编译

    1.安装NuGet包 Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 2.Startup.cs 配置 public ...

  2. .NetCore 使用 Linq 动态拼接Expression表达式条件来实现 对EF、EF Core 扩展查询排序操作

    相信在使用EF的时候对查询条件或者排序上的处理令人心烦,下面我们就来动态拼接表达式解决这一问题 当我们在查询中使用Where的时候可以看到如下参数 下面我们就来扩展 Expression<Fun ...

  3. 用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等

    本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314 ...

  4. 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

    前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...

  5. ASP.NET Core 中间件自定义全局异常处理

    目录 背景 ASP.NET Core过滤器(Filter) ASP.NET Core 中间件(Middleware) 自定义全局异常处理 .Net Core中使用ExceptionFilter .Ne ...

  6. (15)ASP.NET Core Web主机(IWebHostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生存期管理,配置服务器和请求处理管道.主机还可以设置日志记录.依赖关系注入和配置.而host主机又包括W ...

  7. 探索ASP.NET Core 3.0系列一:新的项目文件、Program.cs和generic host

    前言:在这篇文章中我们来看看ASP.Net Core 3.0应用程序中一些基本的部分—— .csproj项目文件和Program.cs文件.我将会介绍它们从 ASP.NET Core 2.x 中的默认 ...

  8. 在ASP.NET Core中使用Apworks快速开发数据服务

    不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支 ...

  9. ASP.NET Core 中间件基本用法

    ASP.NET Core 中间件 ASP.NET Core的处理流程是一个管道,而中间件是装配到管道中的用于处理请求和响应的组件.中间件按照装配的先后顺序执行,并决定是否进入下一个组件.中间件管道的处 ...

随机推荐

  1. (4)ElasticSearch在linux环境中搭建集群

    1.概述 一个运行中的Elasticsearch实例称为一个节点(node),而集群是由一个或者多个拥有相同cluster.name配置的节点组成,它们共同承担数据和负载的压力.当有节点加入集群中或者 ...

  2. WEB漏洞——文件上传

    有关文件上传的知识 为什么文件上传存在漏洞 上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤就容易造成可以上传任意文件的情況,包括上传脚本文件(asp.aspx.php.jsp等格式 ...

  3. Spring整合MyBatis小结

    MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...

  4. Redis单节点安装与使用

    1.配置阿里云yum源 下载配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7 ...

  5. xshell与小键盘问题

    有些程序员的键盘是带有小数字键的,在使用xshell中文版时就可能出现一些小状况,本集就同大家分析一下使用数字键盘出现乱码的情况怎么办. 图1:使用数字小键盘出现乱码 问题描述: 在xshell上用v ...

  6. Linux之crontab命令

    简介 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell 脚本.时间间隔的单位可以 是分钟.小时.日.月.周及以上的任意组合.这个命令非常适合周期性的日志分析或数据备份 ...

  7. bash-completion linux命令补全

    1.有时候用docker run 或者kubectl 想tab补全的时候用不了 这个时候可以安装一个神奇的包bash-completion yum install bash-completion 2. ...

  8. (未完)Java集合框架梳理(基于JDK1.8)

    Java集合类主要由两个接口Collection和Map派生出来的,Collection派生出了三个子接口:List.Set.Queue(Java5新增的队列),因此Java集合大致也可分成List. ...

  9. 1.26学习总结——css盒子模型

    CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...

  10. mysql5.5根据条件进行排序查询 TP5

    用到了 order by if 和 count 使用的是TP5.0 $sql = Db::name('teacher') ->alias('t') ->join('user u', 'u. ...