[LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询
程序员文章站
2022-07-04 08:43:48
...
目录
- [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询
- [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询
- [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射
- [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL
配合js实现动态化查询
不需要写任何if来判断参数拼接SQL,简便效率
一.前端
<form id="search" class="form-horizontal" role="form">
<div class="form-group col-sm-6 col-md-6">
<label title="标题" class="control-label col-sm-3">
用户名称
</label>
<div class="col-sm-9">
<input class="form-control" type="text" name="name" data-operator="6" /><!--6 模糊查询-->
</div>
</div>
<div class="form-group col-sm-6 col-md-6">
<label title="创建时间" class="control-label col-sm-3">
创建时间
</label>
<div class="col-sm-9">
<input class="form-control date" type="text" name="createDate" data-operator="16" data-table="users" data-type="6" />
<!--
data-operator="16" 是大于等于
data-type="6" 是时间格式
-->
</div>
</div>
<div class="form-group col-sm-6 col-md-6 operating">
<a class="btn btn-primary" href="javascript:void(0)" onclick="users.init()">查询</a>
</div>
</form>
然后使用$("#search").serializeQuery();获取动态化参数对象
serializeQuery()方法的代码实现
//生成动态表条件
$.fn.serializeQuery = function () {
var dynamicWhere = {};
var inputArr = $(this).find("input");
for (var i = 0; i < inputArr.length; i++) {
var item = $(inputArr[i]);
//生成一个唯一键
var key = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
//值
var value =
{
Table: item.attr("data-table"),//查询的表(默认为后台设置)
Field: item.attr("name"),//字段名(必填)
Operators: item.attr("data-operator"),//运算符(默认为13,Equal)
Value: item.val(),//值
ValueType: item.attr("data-type"),//值类型(默认为16,string)
};
dynamicWhere[key] = value;
}
return dynamicWhere;
}
更多配置符
data-operator | 操作符 |
13 | 等于(Equal) |
16 | 大于等于(>=) |
21 | 小于等于(<=) |
6 | 模糊查询(Contains) |
data-type | 值类型 |
16 | String |
6 | DateTime |
如果是多表需要配置data-table,data-table对应表名,需要在程序启动时注册
EntityCache.Register(typeof(T));
二.后端cs代码
/// <param name="dynamicWhere">动态化参数对象</param>
public JsonResult Query(Dictionary<string, DynamicTree> dynamicWhere = null)
{
using (var conn = new SqlConnection("数据库连接字符串"))
{
var result = conn.QuerySet<users>().Where(dynamicWhere).ToList();
return result ;
}
}
完整Demo可以去Github上下载:
https://github.com/a935368322/Kogel.Dapper.Test
如有问题也可以加QQ群讨论:
技术群 710217654
框架开源,可以加群下载源码
上一篇: 初学LINQ语句