Title: 🔍 _Where 条件用法 Canonical: https://microi.net/doc/v8-engine/where.html Page-Modified: 2026-03-17T05:28:24.000Z Source: published HTML document body; page revision is not a capability verification date. # 🔍 _Where 条件用法 _Where 是 V8 引擎中通用的条件查询参数,支持前后端统一语法 --- ## 📌 介绍 - _Where 在接口引擎、前端 V8 代码、服务器端 V8 代码中的 JavaScript 写法完全一致 - 每个参数值最终均以参数化形式通过 ORM 在数据库中执行,无 SQL 注入风险 - 支持 MySQL、Oracle、SqlServer 数据库(可扩展更多数据库) 注意 旧的接口引擎 V8 代码如果解析了前端传入的旧版 _Where 条件格式,需要使用 V8.Method.ParseWhere() 将新版 _Where 转换成旧版: js ``` var _oldWhere = V8.Method.ParseWhere(V8.Param._Where); // 新版前端传入的_Where参数为新版格式 ``` --- ## ⚙️ V8 引擎用法 展开查看 JavaScript 代码(37 行) js ``` // 对应sql:WHERE Account = 'cccc' AND Account LIKE '%VK%' var result = V8.FormEngine.GetTableData('Sys_User', { _Where: [ ['Account', '=', 'cccc'], ['Account', 'Like', 'VK']//默认AND条件 ] }); // 对应sql:WHERE Account = 'cccc' OR Account LIKE '%VK%' var result = V8.FormEngine.GetTableData('Sys_User', { _Where: [ ['Account', '=', 'cccc'], ['OR', 'Account', 'Like', 'VK']//OR条件 ] }); // 对应sql:WHERE Xingming LIKE '%张%' AND ( Age > 18 OR Status = 'active' OR Status IS NOT NULL OR Test In (1,2,3)) var result = V8.FormEngine.GetTableData('Sys_User', { _Where: [ ['Xingming', 'Like', '张'], ['AND', '(', 'Age', '>', 18],//此处AND也可不写,默认AND条件 ['OR', 'Status', '=', 'active'] ['OR', 'Status', '<>', null] ['OR', 'Test', 'In', [1, 2, 3], ')'] ] }); //如果日期字段是yyyy-MM-dd HH:mm:ss格式 var result = V8.FormEngine.GetTableData('Sys_User', { _Where: [ ['CreateTime', '>', DateFormat(new Date(), 'yyyy-MM-dd HH:mm:ss')] ] }) //如果日期字段是yyyy-MM-dd格式 var result = V8.FormEngine.GetTableData('Sys_User', { _Where: [ ['JiaoyiDate', '>', DateFormat(item.日期字段, 'yyyy-MM-dd')] ] }) ``` ## 值得注意的是,如果是服务器端.net二次开发,则使用c#语法(非V8 javascript语法) csharp ``` var _formEngine = new FormEngine(); var result = await _formEngine.GetTableDataAsync('Sys_User', new { _Where = new List>() { new List { "Account", "=", "cccc" }, new List { "OR", "Account", "Like", "VK" } } }); ``` ## 条件符号说明 - Value值可直接赋值null,如:[['Account', '=', null ]] 对应 sql:where Account is null csharp ``` //Type参数支持用法: Equal、=、== //均为等于 NotEqual、<>、!= //均为不等于 >、>=、<、<= //大于小于相关判断 In、NotIn //注意此时Value需要传入数组,如:['id1', 'id2'] Like、NotLike //%值% StartLike、NotStartLike //值% EndLike、NotEndLike //%值 ``` ## (旧版写法,仍兼容)V8引擎用法 javascript ``` //Sys_User为表名或表Id,不区分大小写 var result = V8.FormEngine.GetTableData('Sys_User', { //以下对应sql语句: Account LIKE '%ad%' OR Acount LIKE '%VK%'。AndOR可不传,默认为And _Where : [{ Name : 'Account', Value : 'ad', Type : 'Like' }, { AndOr : 'OR', Name : 'Account', Value : 'VK', Type : 'Like' }] //以下对应sql语句:Account LIKE '%cccc%' OR ( Account LIKE '%ad%' AND Account LIKE '%min%' ) //注:GroupStart表示左括号,GroupEnd表示右括号 _Where : [ { Name : 'Account', Value : 'cccc', Type : 'Like'}, { AndOr : 'OR', GroupStart : true, Name : 'Account', Value : 'ad', Type : 'Like' }, { AndOr : 'AND', Name : 'Account', Value : 'min1', Type : 'Like', GroupEnd : true } ] }); return result; ``` ## (旧版写法,仍兼容)值得注意的是,如果是服务器端.net二次开发,则使用c#语法(非V8 javascript语法) csharp ``` var _formEngine = new FormEngine(); var result = await _formEngine.GetTableDataAsync('Sys_User', new { _Where = new List(){ new DiyWhere(){ Name = 'Account', Value = 'ccc', Type = 'Like'}, new DiyWhere(){ AndOr = 'OR', GroupStart = true, Name = 'Account', Value = 'ad', Type = 'Like' }, new DiyWhere(){ AndOr = 'AND', Name = 'Account', Value = 'min1', Type = 'Like', GroupEnd = true } } }); ```