
MVC之查询
然后用linq查询出你要的所有数据,注意:这里一定要用orderby排序,要不然后面分页查询时会不行。
发布日期:2021-05-04 19:01:50
浏览次数:22
分类:精选文章
本文共 8742 字,大约阅读时间需要 29 分钟。
开发工具与关键技术:Visual Studio、MVC作者:幻奏撰写时间:2019.04.13
我之前已经写过新增了,那么现在我来写一下查询。查询很多地方都会用到吧,比如我们要让数据在表格显示出来就要用查询来让表格数据初始化,还有绑定下拉框查询什么的。。。好了,话不多说了就进入今天的讲解吧。
讲查询之前有一个东西要讲一下的,那就是如何进行表格初始化的。在这过程中我们要用到一个《layui》,这个jQuery插件很好用。我们先把它引到视图里,再声明两个变量。var tabTitles;var layer, layuiTable;
最后看下它的数据表格的使用方法,复制过来然后初始化layui。如下:
//加载&初始化layui模块 layui.use(['layer', 'table'], function () { layer = layui.layer; layuiTable = layui.table; tabTitles = layuiTable.render({ elem: '#tabTitles', //url: 'selectStaffInfor', cols: [[ { type: 'checkbox' }, { type: 'numbers', title: '序号' }, { field: 'EmployeeID', title: 'EmployeeID', hide: true }, { field: 'EmployeeNumber', title: '编号', align: 'center' }, { field: 'EmployeeName', title: '姓名', align: 'center' }, { field: 'Phone', title: '电话', align: 'center' }, { field: 'Cellphone', title: '手机', align: 'center' }, { field: 'DeoartmentName', title: '部门', align: 'center' }, { field: 'PositionName', title: '职位', align: 'center' }, { field: 'Address', title: '地址', align: 'center' }, { field: 'Remark', title: '备注', align: 'center' }, ]], page: { limit: 10,//每页显示的条数 limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项 }, data: [] }); //监听表格行单击事件 layuiTable.on('row(tabTitles)', function (obj) { //console.log(obj); //标注选中行样式 obj.tr.addClass("layui-table-click").siblings().removeClass("layui-table-click"); //选中行,勾选复选框 obj.tr.find("div.layui-unselect.layui-form-checkbox")[0].click(); }); searchYuago();//多条件查询的方法 });
初始化layui模块,大概就是复制过来用就是了,不过我们还要把查询按钮的方法放里面,要不然表格出不来。我们还要一个监听表格行的单击事件,也是layui里的方法。如上
我们如果用了模态框,那么在查询之前是不是要清空一下输入框里面的数据,要不然可能有残留的数据,给人不好的体验。我们要获取输入框的ID然后赋值空就OK了。我们还要绑定一个方法到下拉框,我会在最后给你们看下。//弹出组合的查询模态框 function opSearchModal() { //清空姓名信息 $("#nameNumberType").val(""); //绑定部门下拉框 createSelect("Department", "/Page/selectDepartment"); //绑定职位下拉框 createSelect("Position", "/Page/selectPosition"); //弹出模态框 $("#modalCombox").modal("show"); }
到查询的按钮了,当我们点击时要获取所有的查询条件,然后判断数据是否为空或者undefined,因为下拉框的ID如果为空的话,浏览器会报错。所以我们要判断并让它等于0,但输入框的字符串可以为空,只要判断它不为undefined就行了。数据不为空就进行数据表格的重载,这个重载也是那个插件的方法。
//组合查询 function searchYuago() { //获取所有的查询条件 //部门 var departmentId = $("#Department").val(); //职位 var positionId = $("#Position").val(); //姓名 var employeeNumber = $("#nameNumberType").val(); if (departmentId == "" || departmentId == undefined) { departmentId = 0; } if (positionId == "" || positionId == undefined) { positionId = 0; } if (employeeNumber == undefined) { employeeNumber = ""; } //表格数据重载 tabTitles.reload({ url: '/Page/selectStaffInfor', where: { DepartmentID: departmentId, PositionID: positionId, EmployeeNumber: employeeNumber }, page: { curr: 1 } }); //关闭组合查询的模态框 $("#modalCombox").modal("hide"); }
注意:视图写的ID要和传到控制器的ID一样。在写之前我们要创建两个实体类,一个是LayuiTableData类的封装,用于返回layuiTable数据。
public class LayuiTableData{ /// /// 数据状态码 -- 可以不设置 /// public int code { get; set; } ////// 状态信息 -- 可以不设置 /// public string msg { get; set; } ////// 总行数--必须 /// public int count { get; set; } ////// 数据--必须 /// public Listdata { get; set; } }
还有一个是LayuiTablePage类的封装,这样就不用每次都请求分页的数据了。
////// layui table组件分页请求数据封装 /// public class LayuiTablePage { ////// page 代表当前页码 /// public int page { get; set; } ////// limit 代表每页数据量 /// public int limit { get; set; } //方法 ////// 分页开始序号 /// ///public int GetStartIndex() { return (page - 1) * limit; } /// /// 分页结束序号 /// ///public int GetEndIndex() { return page * limit - 1; } }
实体类的命名第一个字母最好都大写。
在控制器那里我们要先接收页面传过来的参数。
ListlistEmployee = (from tbEmployee in myModels.PW_Employee join tbDeoartmentName in myModels.SYS_Department on tbEmployee.DepartmentID equals tbDeoartmentName.DepartmentID join tbPositionName in myModels.SYS_Position on tbEmployee.PositionID equals tbPositionName.PositionID orderby tbEmployee.EmployeeID select new EmployeeVo { EmployeeID = tbEmployee.EmployeeID,//员工ID EmployeeNumber = tbEmployee.EmployeeNumber,//员工编号 EmployeeName = tbEmployee.EmployeeName,//员工姓名 Cellphone = tbEmployee.Cellphone,//手机号码 Phone = tbEmployee.Phone,//电话 Remark = tbEmployee.Remark,//备注 Address = tbEmployee.Address,//地址 DeoartmentName = tbDeoartmentName.DeoartmentName,//部门 PositionName = tbPositionName.PositionName,//职位 DepartmentID = tbEmployee.DepartmentID, PositionID = tbEmployee.PositionID }).ToList();
查询出数据后我们就要对视图传过来的参数进行判断,不能为空或null,然后再对数据进行条件筛选,把我们要查询的数据用lamb表达式查出。如下:
//条件筛选 if (DepartmentID > 0) { listEmployee = listEmployee.Where(m => m.DepartmentID == DepartmentID).ToList(); } if (PositionID > 0) { listEmployee = listEmployee.Where(m => m.PositionID == PositionID).ToList(); } if (!string.IsNullOrEmpty(EmployeeNumber)) { listEmployee = listEmployee.Where(m => m.EmployeeName.Contains(EmployeeNumber) || m.EmployeeNumber.Contains(EmployeeNumber)).ToList(); }
然后,我们要计算数据的总条数。
//计算数据总条数 int totalRow = listEmployee.Count();
再进行分页查询
//分页查询 ListdbEmployee = listEmployee .Skip(layuiTablePage.GetStartIndex())//分页开始的序号 .Take(layuiTablePage.limit)//limit每页显示的条数 .ToList();
最后实例化一下数据,并return 返回数据到页面。
//实例化 LayuiTableDatalayuiTableData = new LayuiTableData { //赋值 count = totalRow,//总行数 data = dbEmployee//数据 }; return Json(layuiTableData, JsonRequestBehavior.AllowGet);
下面是绑定下拉框的方法,我就不说了,你们自己看一下吧。
////// 查询部门 /// ///public ActionResult selectDepartment() { List listDepartment = (from tbDepartment in myModels.SYS_Department select new SelectVo { id = tbDepartment.DepartmentID, text = tbDepartment.DeoartmentName }).ToList(); //拼接选择项 listDepartment = Common.Tools.SetSelectJson(listDepartment); return Json(listDepartment, JsonRequestBehavior.AllowGet); }
查询就到这里结束了,你们学会了没(o゜▽゜)o☆
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月07日 18时29分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2种解法 - 获取一条直线上最多的点数
2019-03-05
项目中常用的审计类型概述
2019-03-05
nodeName与tagName的区别
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05
python-day3 for语句完整使用
2019-03-05
linux下远程上传命令scp
2019-03-05
可重入和不可重入函数
2019-03-05
(2.1)关系模型之关系结构和约束
2019-03-05
androidstudio同步的时候下载jcenter的库出错解决办法
2019-03-05
ButterKnife使用问题
2019-03-05
java基础--继承
2019-03-05
按位与、或、非、异或总结
2019-03-05
01 背包问题
2019-03-05
ILI9341几个重要的命令
2019-03-05
springboot通过控制层跳转页面404
2019-03-05
idea2020 没有 tomcat server
2019-03-05
为什么讨厌所谓仿生AI的说法
2019-03-05
ORACLE 客户端工具
2019-03-05
云服务器springboot jar项目开启jmx remote监控-解决无法连接的问题
2019-03-05