在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. MongoDB(3)- Database 数据库相关

    Database MongoDB 将数据记录存储为文档(特别是 BSON 文档) 这些文档在集合中聚集在一起 数据库存储一个或多个文档集合. 在 MongoDB 里面存在数据库的概念,但没有模式 Sh ...

  2. VMware ESXi 7.0 U2 SLIC 2.6 & Unlocker 集成 Intel NUC 网卡、USB 网卡和 NVMe 驱动

    ESXi 7 U2 标准版镜像集成 NUC 网卡.USB 网卡 和 NVMe 驱动. 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u2-nuc-usb-n ...

  3. 设置自启动nginx(适用于其他软件)(LinuxDeploy里的Ubuntu)

    LinuxDeploy里的Ubuntu自启动nginx(适用于其他软件) 网上的教程是这样的,基本能用 1.编写脚本(这个文件及其内容安装Nginx后自动生成,没有的话内容自己Google) $ su ...

  4. MapReduce原理深入理解(二)

    1.Mapreduce操作不需要reduce阶段 1 import org.apache.hadoop.conf.Configuration; 2 import org.apache.hadoop.f ...

  5. Linux档案权限篇(一)

    查看档案的属性"ls-al". 即列出所有的档案的详细权限与属性(包括隐藏文件) 权限 第一个字符代表档案的类型: d:代表是目录 -:代表是文件 l:代表是连接文件(相当于win ...

  6. SonarQube汉化

    SonarQube安装后默认是英文,如果不习惯看英文,可以进行汉化,官方提供了汉化插件. 登录后,汉化步骤如下: 需要点击了解风险,不然查询到插件后没有install按钮 搜索Chinese,找到插件 ...

  7. python学习笔记(十一)-python程序目录工程化

    在一个程序当中,一般都会包含文件夹:bin.conf.lib.data.logs,以及readme文件. 所写程序存放到各自的文件夹中,如何进行串联? 首先,通过导入文件导入模块方式,引用其他人写好的 ...

  8. 疏忽Bug

    仅供自己留存备份   错误: vector不是模板 解决: 头文件未包含 头文件: #include <vector> using namespace std;     错误: 多字节字符 ...

  9. 深入理解Python切片

    Python序列的切片很基础同时也很重要,最近看到一个[::-1]的表达,不明所以,查了一些资料并实际操作,对Python切片有了更深刻的认识,以下结合例子详细说明.先看下切片的基本语法,一般认为切片 ...

  10. 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 百篇博客分析OpenHarmony源码 | v62.01

    百篇博客系列篇.本篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 51.c.h.o 本篇开始说文件系统,它是内核五大模块之一,甚至有Linux的设计哲学是" ...