C# Linq的模糊查询(包含精确模糊查询)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Linq的模糊查询(包含精确模糊查询)相关的知识,希望对你有一定的参考价值。

参考技术A

linq大家肯定用过,对于其中的模糊查询肯定也有所了解

提起linq的模糊查询首先大家想到的肯定是 Contains

不错这也是linq模糊查询的精髓,一般的模糊查询用 Contains都是可以解决的,特护的精确到字符串某一位的迷糊查询就得另想办法了,话不多说,下面一一说下模糊查询:

先贴出整个查询,在一一说明,并且把对应的sql语句也会写出来:

1.判断是否为空或者null

string.IsNullOrEmpty(des.PlateNum) ————————>sql server的PlateNum is null的判断

from des in db.ModelsVehicleRecognition where (!string.IsNullOrEmpty(des.PlateNum)) select new plateMun = des.PlateNum

等同于

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum IS NOT NULL

2.普通包含模糊查询

1)以某字符串开头的模糊查询

des.PlateNum.StartsWith("皖A8") ————————>sql server 的 like \'皖A8%\'

from des in db.ModelsVehicleRecognition where (des.PlateNum.StartsWith("皖A8")) select new plateMun = des.PlateNum

等同于

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum like \'皖A8%\'

2)以某字符串结尾的模糊查询

des.PlateNum.EndsWith("68T") ————————>sql server 的 like \'%68T\'

from des in db.ModelsVehicleRecognition where (des.PlateNum.EndsWith("68T")) select new plateMun = des.PlateNum

等同于

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum like \'%68T\'

3)包含某字符串的模糊查询

des.PlateNum.Contains("A3") ————————>sql server 的 like \'%A3%\'

from des in db.ModelsVehicleRecognition where (des.PlateNum.Contains("A3")) select new plateMun = des.PlateNum

等同于

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum like \'%A3%\'

3.精确到字符串对应位数字符的模糊查询(*重点)

SqlFunctions.PatIndex("_a__3%", des.PlateNum) > 0————————>sql server 的 like \'_a__3%\'

from des in db.ModelsVehicleRecognition where (SqlFunctions.PatIndex("_a__3%", des.PlateNum) > 0) select new plateMun = des.PlateNum

等同于

SELECT PlateNum FROM VehicleRecognition WHERE PlateNum like \'_a__3%\'

说明:\' a__3%\' 中的下划线“ ”表示一个字符,\'_a__3%\' 这个字符串查询意思就是第二个字符是a,第五个字符是3的字符串

因为a和3之间有两个下划线“_”所以查询出的结果也要满足a和3之间有两个字符才行,

也就是说两个精确字符之间隔了几个字符,在查询的时候就要写几个下划线“_”。

java模糊查询问题,代码如下,总是接收不到查询结果,但是如果用精确查找就能接受到查询结果?

public ArrayList<Commodity> selectCommodity(String str)
ArrayList<Commodity> list = new ArrayList<Commodity>();
PreparedStatement pstmt = null;
ResultSet rs = null;
try
Connection con = DBConnection.getConnection();
if(str == "")
pstmt = con.prepareStatement("SELECT * FROM tbcommodity");

else if(Mytools.isNumeric(str))//如果输入的是数字就按ID进行查找
pstmt = con.prepareStatement("SELECT * FROM tbcommodity where id like ?");
pstmt.setString(1, "'%"+str+"%'");

else //不是数字就按名字进行查找
pstmt = con.prepareStatement("SELECT * FROM tbcommodity where name like ?");
pstmt.setString(1, "'%"+str+"%'");

rs = pstmt.executeQuery();
while(rs.next())
Commodity com = new Commodity();
com.setId((rs.getInt("id")));
com.setName((rs.getString("name")));
com.setCatalog((rs.getString("catalog")));
com.setSupplierID(rs.getInt("supplierID"));
com.setProductiondate(rs.getDate("productiondate"));
com.setDurabilityperiod(rs.getInt("durabilityperiod"));
com.setPrice(rs.getDouble("price"));
com.setCount(rs.getInt("count"));
list.add(com);

rs.close();
pstmt.close();
catch(Exception e)
e.getStackTrace();
System.out.println("查询失败!");

finally
DBConnection.closeConnection();

return list;

你好,很高兴回答你的问题。

问题的原因是拼接模糊查询条件是有问题。仔细看下图红线标识的位置,在百分号两边各加了一个单引号。这个是不需要的。

如果参数是通过setString方法赋值的,则在最终执行的sql时会自动拼接单引号的。这里加上单引号反而是错误的了。

如果有帮助到你,请点击采纳。

我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。

参考技术A

百分号左右不用加单引号!你想想你用等于的时候加单引号了吗?

这是我模拟的sys_user表数据:

根据name模糊查询,获取id:

运行结果:

参考技术B 是不是多了个问号

以上是关于C# Linq的模糊查询(包含精确模糊查询)的主要内容,如果未能解决你的问题,请参考以下文章

C# 动态Linq 建立模糊查询通用工具类

asp+access like 模糊查询查不到内容

JAVA带预编译的模糊查询问题

C# Access 模糊查询SQL语句

SQL中的模糊查询语句

c#不用SQL怎样进行模糊查询?