怎么用linq to sql 写单表多字段的模糊查询方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用linq to sql 写单表多字段的模糊查询方法相关的知识,希望对你有一定的参考价值。

比如说,我要做一个高级搜索,表里一共有o1,o2...o10.这么多的字段,查询的时候不需要输入全部字段,可以有选择的输入几个字段的关键字。请问应该怎么编写这个方法。

很简单,可以做类似SQL的拼接方法:
dim iQuery= from a in b select a
if aa.length >0 then iQuary = iQuary.Where(function(w) w.o1 = aa)
if bb.length >0 then iQuary = iQuary.Where(function(w) w.o2 = bb)
.........
参考技术A 字段是输入,还是选择 ,如果让用户自动选择,最好从系统表中提取数据库字段描述,然后拼装一个sql 语句。追问

表里是有数据的,查询的时候是通过从页面的控件中获得的值来查询的,sql的拼装我会写可是不会linq to sql的方法,网上找了很久都没找到适合的答案。冒昧问一下能不能提供一段代码实例一下

追答

发了一个url给你,你可以看看。

参考技术B 你是指多个查询条件么?
from n in DBContext.TableA
where n.A1== a && n.A2== b
select n

mysql单表多表查询

单表查询语法:

select 字段1,字段2... from 表名
where 条 件
group by field
having 筛选
order by 字段
limit

限制条数 关键字的优先级:from where group by having select distinct order by limit;

 

1.找到表:from

 

2.拿着where指定的约束条件,去文件/表中取出一条条记录

 

3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

 

4.按照select后的字段得到一张新的虚拟表,如果有聚合函数,则将组内数据进行聚合

 

5.将4的结果过滤:having,如果有聚合函数也是先执行聚合再having过滤

 

6.查出结果:select

 

7.去重 distinct

 

8.将结果按条件排序:order by desc(降序,默认升序)

 

9.限制结果的显示条数 limit 

where是一种约束条件,mysql会拿着where指定的条件去表中取数据,而having则是在取出数据后进行过滤.

where字句中可以使用:

1. 比较运算符:> < >= <= <> !=
2. between 80 and 100 值在10到20之间
3. in(80,90,100) 值是10或20或30
4. like \'王%\'
    可以是%或_,
    %表示任意多字符
    _表示一个字符 
5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

group by 分组查询:以按照任意字段分组,但分完组后,只能查看分组的那个字段,要想取的组内的其他字段信息,需要借助函数。

聚合函数:

group_concat 只跟group by 连用 查看分组后的组内成员

count()    统计成员个数

avg()  计算平均值

sum()  计算和

max()  找到最大值

min()  找到最小值

having 过滤:

 

执行优先级从高到低:where > group by > 聚合函数 > having
1. Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的(先找到表,按照where的约束条件,从表(文件)中取出数据),Where中不能使用聚合函数。

 

2. Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作(先找到表,按照where的约束条件,从表(文件)中取出数据,然后group by分组,如果没有group by则所有记录整体为一组,然后执行聚合函数,然后使用having对聚合的结果进行过滤),在Having中可以使用聚合函数。

 

3. having可以放到group by之后,而where只能放到group by之前

 

4. 在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。

order by 排序

限制查询的记录数:limit

 

多表连接查询:

内连接:..... inner join...on 连接条件........

左连接:....... left join... on 连接条件.,.......

右连接:....... right join ... on 连接条件....

全连接:......union.........

子查询:

1:子查询是将一个查询语句嵌套在另一个查询语句中。
2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。
3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
4:还可以包含比较运算符:= 、 !=、> 、< 等

附:连接查询跟子查询同时查询题一道

查询物理课程比生物课程高的学生的姓名和学号

 

以上是关于怎么用linq to sql 写单表多字段的模糊查询方法的主要内容,如果未能解决你的问题,请参考以下文章

mysql怎么实现全局的模糊搜索?

Mybatis单表多表查询,动态SQL使用

多个关联表多字段多条件模糊查询

oracle中查询中单表多字段去重,怎么实现?

Linq中的group by多表多字段

DMLDQL与单表多表的增删改查(20190215下午)