在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. element后端管理布局

    <template> <el-container> <el-header> <Header></Header> <span class ...

  2. MySQL高级语句(二)

    目录: 1.别名 2.子查询 3.EXISTS 4.连接查询 5.CREATE VIEW 视图 6.UNION 联集 7.交集值 8.无交集值 9.CASE 10.算排名 11.算中位数 12.算累积 ...

  3. 线程调用BeginInvoke

    线程异步调用 Thread objThread = new Thread(new ThreadStart(delegate             {                 Dispatch ...

  4. FastAPI(5)- get 请求 - 查询参数 Query Parameters

    什么是查询参数? http://127.0.0.1:8000/get?name=xxx&age=18 http://127.0.0.1:8000/get?age=18&name=xxx ...

  5. Android使用Fragment+ViewPager +TabLayout实现顶部标题栏

    参考资料: https://blog.csdn.net/Tobey_r1/article/details/93221486 项目背景是Android开发新闻APP,实现新闻文本的分类,内容的展示,并实 ...

  6. Kubernetes-Pod介绍(三)-Pod调度

    前言 本篇是Kubernetes第六篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...

  7. 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚

    遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...

  8. php在类中使用回调函数 如array_map

    <?php class foo {   var $var;   function bar() {      array_map(array($this, "baz"), ar ...

  9. Shell系列(24)- 条件判断之文件类型

    按照文件类型进行判断 标红,记住:其他了解即可 测试选项 作用 -b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) -c 文件 判断该文件是否存在,并且是否为字符设备文件(是字符 ...

  10. Python守护线程简述

    thread模块不支持守护线程的概念,当主线程退出时,所有的子线程都将终止,不管它们是否仍在工作,如果你不希望发生这种行为,就要引入守护线程的概念. threading模块支持守护线程,其工作方式是: ...