当前位置: 首页 > news >正文

Entity Framework扩展高级查询功能

需求:前端按照格式传递查询条件参数,后端自动解析。

前端参数格式:[{"f":"","v":"","o":"","t":"",}]。

参数f:参数名。

参数v:参数值。

参数o:=(默认)、<、<= 、>、>=、like、bt  指between。

参数t:搜索控件类型:tx:文本框 text(默认);ta:副文本框 textarea;tm:时间 time;dt:日期 date;dm:日期时间 datetime;dr:时间范围 daterang;sl:下拉选项 select。

例如想查询名称叫张三的:[{“f”:"name","val":"张三"}]

对应 的类结构:

public class TFilter
{/// <summary>/// field/// </summary>public string f { get; set; } //过滤的关键字/// <summary>/// value/// </summary>public string v { get; set; } //过滤的值/// <summary>///操作符 operator///=///<///<= ///>///>=///like///bt  指between/// </summary>public string o { get; set; }///// <summary>/// 搜索控件类型/// tx:文本框 text/// ta:副文本框 textarea/// tm:时间 time/// dt:日期 date/// dm:日期时间 datetime/// dr:时间范围 daterang/// sl:下拉选项 select/// </summary>public string t { get; set; }}

前端根据form表单生成查询参数(也可以自动根据需求实现)


/*序列化成[{f:"",v:"",o:""}],用于条件过滤
//2020-01-22*/
Object.defineProperty(Object.prototype, 'toFilter', {configurable: true,enumerable: false,writable: false,value: function (o) {var json = [];var $form = this;var $array = $form.querySelectorAll("input,select,textarea,[name]");$array.forEach(function (item, index) {var $this = item;var type = item.type ? item.type.toLowerCase() : "div";var name = item.getAttribute("name");if (!name) {name = item.getAttribute("id");}if (!name) { return; }var targetName = item.nodeName;var val = item.value.trim();if (!val) {return;}if (targetName === "INPUT" || targetName === "SELECT" || targetName === "SELECT-ONE" || targetName === "SELECT-MULTEITY" || targetName === "TEXTAREA") {json.push({ "f": name, "v": val, "o": item.dataset.o ? item.dataset.o : "=", "t": item.dataset.t ? item.dataset.t : "tx" });}});return json;}
});

扩展Where方法

    public static ISugarQueryable<T> Where<T>(this ISugarQueryable<T> query, TFilter[] filters,string LambdaParam ="c"){if (filters == null || filters.Length == 0){return query;}var param = DynamicLinq.CreateLambdaParam<T>(LambdaParam);Expression body = Expression.Constant(true); //初始默认一个trueforeach (var filter in filters){Expression condition = param.GenerateBody<T>(filter);if (condition == null) continue;body = body.AndAlso(condition); //这里可以根据需要自由组合}var lambda = param.GenerateTypeLambda<T>(body); //最终组成lambdareturn query.Where(lambda);}

使用演示:

List<TFilter>   filters= ...;

 dbQuery.Where(filters);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 炉石传说辅助攻略—VMOS云手机助攻:国服回归任务要点,哪个辅助更好?
  • Elasticsearch 中 Painless 脚本详解
  • Python3爬虫教程-HTTP基本原理
  • 【MySQL】基础入门篇
  • [WMCTF2020]Make PHP Great Again 2.01
  • s3c2440——ADC模数转换器,Linux驱动编程——u-boot
  • go webapi上传文件
  • centos7安装Redis单机版
  • PySimpleGUI:简化 Python 中的 GUI 开发
  • uniapp实现在表单中展示多个选项,并且用户可以选择其中的一个或多个选项
  • ARM/Linux嵌入式面经(三九):中科驭数
  • 89个H5小游戏源码
  • 大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元
  • python爬虫bs4库的用法
  • SpringBoot集成阿里easyexcel(一)基础导入导出
  • 【Leetcode】101. 对称二叉树
  • [译]如何构建服务器端web组件,为何要构建?
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【剑指offer】让抽象问题具体化
  • AWS实战 - 利用IAM对S3做访问控制
  • HTML中设置input等文本框为不可操作
  • Java方法详解
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • node-glob通配符
  • Promise初体验
  • Sublime text 3 3103 注册码
  • Terraform入门 - 1. 安装Terraform
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • zabbix3.2监控linux磁盘IO
  • ​【已解决】npm install​卡主不动的情况
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​iOS安全加固方法及实现
  • ​低代码平台的核心价值与优势
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #宝哥教你#查看jquery绑定的事件函数
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (c语言+数据结构链表)项目:贪吃蛇
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (ros//EnvironmentVariables)ros环境变量
  • (solr系列:一)使用tomcat部署solr服务
  • (纯JS)图片裁剪
  • (一) storm的集群安装与配置
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 的程序集加载上下文
  • .net 连接达梦数据库开发环境部署
  • .Net6 Api Swagger配置