多条件查询
开发工具与关键技术:VS C# 作者:宋永烨 撰写时间:2019/4/23
当用户需要通过一定的条件进行范围查询的时候,在控制器中,就需要判断用户传来的条件,一般用户条件查询会有下拉框,文本框等from表单组件(默认下拉框内的数据已绑定,本文暂不进行时间的范围查询),通过获取这些组件的值,可以方便快捷的采集用户的信息
一、查询
创键多条件查询的方法,接收所有组件的值,由于使用了layui的分页功能,所以需要引入用于分页的工具类
本文查询的数据是成绩,由于一个学生可能存在多个成绩,所以需要先将最优成绩获取到。通过group关键字将数据分组,最后在获取字段时将最优成绩获取到即可。获取最优成绩的原因:同一次考试同一人可以多次测试,而排序只要一条数据即最优成绩用于排序
之后再将需要查询的表进行连接,由于连表查询的代码太长就不截取连表查询的全部图片而是采用文字描述与少量图片交错的方式
首先将一张表赋值给一范围变量,然后将需要连接的表通过共同的键(主外键皆可)进行连接,重复此步骤,将所有表进行连接
由于涉及到的字段过多查询时声明任何一张表也无法接收所有字段,而匿名查询的数据类型无法转换,所以需要一个可以接收所有需要的字段的类,在创建类的字段时,为了减少工作量,可以用继承,给创建的类继承一个所需字段最多的表,可以少些很多字段
二、判断
将页面获取的参数进行判断,Int类型的数据,等于零即表示为空,故判断是否大于零即可,应为下拉框的显示与option的value有关,所以通过将option的value值赋值为需要显示的数据的存储的表的主键id值,即可使下拉框选定时返回数据对应表格的主键ID
除了下拉框,还有可能出现文本框即string字符串的格式的数据,
字符串判断是否为空的方式与int类型的数据稍微不同,字符串数据为空通过关键字判断,然后取反,即不为空
where筛选也与int类型的数据略有不同,判断时不是判断是否相等,而是判断查询的数据是否包含需要查询的内容。页面穿入的数据可能包含空格,导致匹配失败,所以使用去空格来防止这个意外情况的发生
三、返回
为了使返回的数据可以被layui的表格所接收,所以需要对数进行处理
获取查询到的数据条数,用于返回到页面作为查询到的数据总条数显示
对数据进行分页处理,通过关键字OrderByDescending对数据进行降序,使用ID排序,Skip用于当页面分页到第几页时需要跳过的数据的条数,Take的作用是用于确定当前页面的数据条数
ToList:为了保持数据类型的一致性
使用可以被layui读取的数据类型的工具类接收数,接收数据可以在创建变量时直接赋值,也可以创建完成后再进行赋值
最后将赋值完成的工具类返回给页面即可。
总结:
查询时需要将一个用户的多条数据整合成一个数组,获取需要的一条即可(前提是只要一条)
连表查询需要一个至少包含所有需要查询的字段的字符串,可以多,不能少
字符串与整形的判断有所不同,复制粘贴请注意
获取的数据直接返回无法被插件读取,记得将格式调整好
代码来源于老师
- 按拼音模糊匹配查询条件的生成类
- Linq的条件查询
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- SQL 查询语句中交叉条件的应用!
- 如何让从数据库中查询出符合条件的记录,然后给每个记录自动加上序号,序号是根据符合条件的记录多少在随时变化.而且也会在以查询生成的报表中显示出来.谢谢
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
- mongodb 查询结果保存为结果集以及根据条件导出数据
- Hibernat 使用Criteria查询多对多关系(SET集合)条件
- MySQL实现字符串分割并按条件分组查询并统计个数
- Hibernat 使用Criteria查询多对多关系(SET集合)条件
- left outer join 结合条件查询
- Hbase scan通过rowkey条件查询
- 改写Spark JdbcRDD,支持自己定义分区查询条件
- 带条件分页查询的主数据列表(施工单位为例)
- Android中使用OrmLite(二):复杂条件查询
- 使用Python读取TestTrack记录- Part3 动态生成Linq to xml查询语句筛选条件
- pandas全表查询,根据条件返回。记录一次爬坑过程。
- ibatis动态查询条件
- ABAP 动态查询条件
- hibernate 3.0 多条件查询方法