C# Linq的模糊查询(包含精确模糊查询)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Linq的模糊查询(包含精确模糊查询)相关的知识,希望对你有一定的参考价值。
参考技术Alinq大家肯定用过,对于其中的模糊查询肯定也有所了解
提起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的模糊查询(包含精确模糊查询)的主要内容,如果未能解决你的问题,请参考以下文章