在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索引的简单理解

    目录 MongoDB索引 1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8 全 ...

  2. Vue开发多人聊天室 复盘总结

    前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...

  3. Spring Boot 2.x 之 Spring Data JPA, Hibernate 5

    1. Spring Boot常用配置项 基于Spring Boot 2.0.6.RELEASE 1.1 配置属性类 spring.jpa前缀的相关配置项定义在JpaProperties类中, 1.2 ...

  4. java原码反码补码以及位运算

    原码, 反码, 补码的基础概念和计算方法. 对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式. 1. 原码 原码就是符号位加上真值的绝对值, 即 ...

  5. scrum项目冲刺_day02总结

    摘要:今日完成任务. 1.appUI页面完成 2.图像识别正在进行 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能 2.语音识别功能 3.垃圾搜索功能 4.相关新闻爬取 三. ...

  6. springboot 配置 application.properties相关

    springboot 有读取外部配置文件的方法,如下优先级: 第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下.第二种是直接把配置文件放到jar包的同级目录.第三 ...

  7. javascript 高阶函数 currying & uncurrying

    * currying var currying = function(fn) { var args = []; return function() { if (arguments.length === ...

  8. Oracle基本入门

    一.数据的存储 1.java 程序中的对象:数组.集合保存.当运行的程序结束的时候,里面的数据就消亡. 2.文件存储系统: 存在的缺陷: 2.1)没有明确的数据类型划分. 2.2)没有用户身份验证机制 ...

  9. nginx与mysql安装

    yum install -y wget vim gcc-c++ bash-completion wget http://nginx.org/download/nginx-1.14.0.tar.gzta ...

  10. HTML 网页开发、CSS 基础语法——九.CSS概述

    1.产生背景 从HTML的答案盛开时,样式就以各种形式存在,最初的HTML只i包含很少的显示属性.随着HTML的成长为了满足页面设计者的要求,HTML添加了许多显示功能,随着功能的增加HTML页面变得 ...