用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
[TOC] ## 更新时间 2022/2/8 ## 用途 减轻后端对列表查询的编写逻辑,所以特定一套前端查询语法 ## 使用限制 查询语法是基于对象的查询语法,所以要查询的属性必须是对象包含的属性 ## 语法 ### 属性名 要查询的属性名称,必须是对象包含的属性 ### 约束 约束必须是字符串格式,格式如下 `组名称[操作符,值,逻辑符]` #### 组名称 在逻辑符为 `或` 时有效 #### 操作符 目前支持 `=`,`!=`,`>`,`>=`,`<`,`<=`,`LIKE`,`!LIKE`,`%`,`!%`,`IN`,`!IN`,`IS` 2022.02.22 新增 `DESC`,`ASC` 排序 2022.03.31 新增 `E>`,`E<` 等价于 `>=`,`<=` - %符号是LIKE的缩写 - 操作符大小写不敏感 #### 逻辑符 `AND` / `OR` ### SetCondition 2022.02.22 新增 可以过程中设置查询条件,编译安全推荐使用 注意,条件必须使用 Equals 函数进行指定 ``` search.SetCondition(m => m.LoginName.Equals("[=,梵天]")); ``` ### GetCondition 2022.04.22 新增 过程中可以获取已经设置的条件 ``` string con = search.GetCondition(m => m.CompanyName); ``` ### 例子 一个搜索接口定义如下: ```csharp public IActionResult PostSearch(Dictionary<string, string> searchKey) { var search = new ORMSearch<Model.Company>(searchKey); search.SetCondition(m => m.LoginName.Equals("[=,梵天]")); var itemDB = Utility.db.Table<Model.Company>(); search.SetWhereCondition(itemDB); itemDB.ThrowSQLString().FindAll(); return new DefaultActionResult { Code = "0000" }; } ``` 正常情况下我们的查询交互: ```json { "searchKey": { "companyName": "测试", "loginCount": "0", "createTime": "2022-2-1" } } ``` 输出SQL语句如下: ```sql SELECT * FROM V2_Company WHERE  V2_Company.LoginName = '梵天' AND  // 由 SetCondition 产生 V2_Company.CompanyName = '测试' AND  V2_Company.LoginCount = 0 AND  V2_Company.CreateTime = '2022-02-01 00:00:00.000000' ``` 使用查询语法后POST数据格式如下: ```json { "searchKey": { "companyName": "[like,%测试%]", "city": "[in,WZ|TZ|HZ]", "loginCount": "[=,0]", "createTime": "[>, 2022-2-7][desc]" } } ``` 输出的SQL语句如下: ``` SELECT * FROM V2_Company    WHERE V2_Company.CompanyName LIKE '%测试%' AND  V2_Company.City IN ('WZ','TZ','HZ') AND  V2_Company.LoginCount = 0 AND  V2_Company.CreateTime > '2022-02-07 00:00:00.000000' ORDER BY V2_Company.CreateTime DESC ``` ### NULL查询 修改POST的参数 ```json { "searchKey": { "companyName": "[is,null]", "loginCount": "[is, not null]" } } ``` 输出的SQL语句如下: ```sql SELECT * FROM V2_Company WHERE  V2_Company.CompanyName IS NULL AND  V2_Company.LoginName IS NOT NULL ``` ### 或逻辑 修改POST的参数 ```json { "searchKey": { "companyName": "G1[like,%测试%,OR][LIKE,%游戏%,OR]G2[LIKE,%老大%]", "loginCount": "[=,0]", "createTime": "G2[>,2022-2-1,OR]" } } ``` 输出的SQL语句如下: ```sql SELECT * FROM V2_Company    WHERE V2_Company.LoginCount = 0 AND  (V2_Company.CompanyName LIKE '%测试%' OR V2_Company.CompanyName LIKE '%游戏%') AND  (V2_Company.CompanyName LIKE '%老大%' OR V2_Company.CreateTime > '2022-02-01 00:00:00.000000')  ```