数据库组件 Hxj.Data (十二) (模糊查询、简单的in,not in查询)

条件的生成都是通过对表中字段进行的。

比如:

Products._.UnitPrice > 1

Products._.CategoryID == 2

这些是简单的比较。

下面来介绍通过like 模糊查询该怎么做。

先上代码,

Products._.ProductName.Contain("apple")

这句等效sql就是(sqlserver)   productname like ‘%apple%'

就是完全模糊搜索。

Products._.ProductName.BeginWith("apple")

这句等效sql就是(sqlserver)   productname like ‘apple%',属于左匹配,查找productname列中所有以apple开头的。

Products._.ProductName.EndWith("apple")

这句等效sql就是(sqlserver)   productname like ‘%apple',属于右匹配,查找productname列中所有以apple结尾的。

再来看看 in 查询

categoryid in (1,2,3) 类似该怎么处理呢?

看下面的例子:

DbSession.Default.From<Products>()
         .Where(Products._.CategoryID.SelectIn(1, 2, 3))
         .ToList();

就是这么处理的。

生成的sql:

Text:
SELECT * FROM [Products]
WHERE [Products].[CategoryID]
IN (@a5670053f4ae44f2a33eb5aaf54e9abf,@43f2ba0b559a45b38328b062c61f7caf,@4761cd088ce04ebf8d9670fb22417b8f)
Parameters:
@a5670053f4ae44f2a33eb5aaf54e9abf[Int32] = 1 @43f2ba0b559a45b38328b062c61f7caf[Int32] = 2  @4761cd088ce04ebf8d9670fb22417b8f[Int32] = 3 

是不是符合要求了啊。

如果知道Products._.CategoryID类型,当然这里是int

那推荐的写法是:

DbSession.Default.From<Products>()
         .Where(Products._.CategoryID.SelectIn<int>(1, 2, 3))
         .ToList();

这样可减少一次装箱操作。

最终生成的sql也是一样的。

not in 的方法是SelectNotIn

操作是一样的。

如下:

DbSession.Default.From<Products>()
         .Where(Products._.CategoryID.SelectNotIn<int>(1, 2, 3))
         .ToList();

生成的sql

Text:
SELECT * FROM [Products]
WHERE [Products].[CategoryID]
NOT IN
(@a154584666f34bfaaa16bf8ede39774f,@7d3231666b19496f925a09b13d3541d0,@184523c709334fb299a736f4c402a163)
Parameters:
@a154584666f34bfaaa16bf8ede39774f[Int32] = 1 @7d3231666b19496f925a09b13d3541d0[Int32] = 2  @184523c709334fb299a736f4c402a163[Int32] = 3 

这样查询是不是变的简单了啊。

下一节将讲述子查询。

时间: 2024-08-25 06:20:12

数据库组件 Hxj.Data (十二) (模糊查询、简单的in,not in查询)的相关文章

数据库组件 Hxj.Data (二十八)

数据库组件 Hxj.Data (二十八)(事务中的查询,查询字段字中的子查询,WhereClip的隐式转换) 本节讲述新版本中新加的功能,以及如何使用. 事务中的查询 应用场景,有时我们需要事务更新.添加.删除表的操作,在提交事务又需要对这些进行查询(不想 降低事务级别让其他连接查询事务中的数据变动),在事务内部进行的查询. 其实只是在DbTrans中增加了FromSection方法. 示例代码如下: using (DbTrans trans = DbSession.Default.BeginT

数据库组件 Hxj.Data (二十五)(数据库连接配置

本节补充讲述connectionStrings的设置. 组件读取connectionStrings节点的配置的时候会根据providerName来判断是哪个数据库. 数据库 providerName Sql server 2000 1.System.Data.SqlClient 2.Hxj.Data.SqlServer Sql server 2005 Hxj.Data.SqlServer9 MS Access Hxj.Data.MsAccess Sqlite 1.System.Data.SQLi

数据库组件 Hxj.Data (二十四)(Sqlite数据库)

Hxj.Data(V1.3)组件增加了对Sqlite数据库的支持. 以及实体生成工具也同时发布(V1.3)版本支持Sqlite数据库的实体生成. 使用Sqlite数据库开发,需要引用Hxj.Data.Hxj.Data.Sqlite.System.Data.SQLite这三个DLL. config配置数据库连接例如: <add name="SqliteConnectionString" connectionString="Data Source=C:\sqldb.db&q

数据库组件 Hxj.Data (二十二) (缓存)

首先我是做web开发的,所以很多会偏向web的,组件使用的缓存是System.Web.HttpRuntime.Cache. 组件在默认情况下是关闭缓存的. 所以要开启缓存查询要做一下配置. 先看一下例子配置: <configSections> <section name="HxjCacheConfig" type="Hxj.Data.CacheConfiguration,Hxj.Data"/> </configSections>

数据库组件 Hxj.Data (二十六)(Oracle配置)

Oracle配置在connectionStrings节点的providerName为System.Data.OracleClient或者 Hxj.Data.Oracle之外,其他操作使用并没有什么不同. 不过相对于Oracle的自增长列有所不同,要做适当的处理. Oracle是通过Sequence来获取增长的值,不同于Sql Server可以方便的设置列的自增长. 在这里通过修改生成的实体就可以完成自增长列的设置. 例如: 建了一个Sequence,名为:mysequence 表中需要自增的字段

数据库组件 Hxj.Data (二十七)(字段组合更新)

Hxj.Data V1.5.1版本开始支持字段组合更新. 例如:update table set a=b+c update table set a=a+1 (+.-.*./.%)依次类推. 下面将举具体的例子.(例子只是为了测试效果,没有实际意义) 例一. DbSession.Default.Update<Products>(Products._.UnitPrice, Products._.ReorderLevel + Products._.UnitPrice, Products._.Prod

数据库组件 Hxj.Data (二十) (分页)

分页在前面好几节中的列子中已经出现,现在在详细讲解一下. 有三种方法去实现: 1.Top(int topCount) 方法 在sqlserver和msaccess中其实就是top , 在oracle通过rownum实现. 2.From(int startIndex, int endIndex) 从startIndex条到endIndex条之间的记录数. 3.Page(int pageSize, int pageIndex) 每页pageSize条,第pageIndex页 下面就依次对这三个方法举

数据库组件 Hxj.Data (二十九)(DbSession的推荐写法)

在系列文章中的示例都是DbSession.Default做为操作数据的入口. Default是读取config文件中connectionStrings节点的最后一个节点的配置. 在实际项目中还是推荐创建一个DbSession. 可以如下写法: public class Db { public readonly static DbSession Northwind = new DbSession ("NorthwindConnectionString"); static Db() { N

数据库组件 Hxj.Data (二十三) (自定义缓存)

配置的缓存并不能满足我们的需求,例如有时候需要刷新缓存,或者某次查询缓存时间或者缓存依赖 不一样等. 刷新缓存 例如: DbSession.Default.From<Products>().Where(Products._.ProductID == 1).Refresh ().ToFirst(); Refresh()方法设置了刷新缓存,即不从缓存中读取,直接从数据库读取最新数据,并重新缓存. 设置查询的缓存有效期. 例如: DbSession.Default.From<Products&

数据库组件 Hxj.Data (二十一) (ToScalar&amp;lt;TResult&amp;gt;)

对组件进行了扩展,最大的修改就是增加缓存查询,以获得更好的性能. 本节先讲一些小的扩展修改. 之前版本ToScalar()只是返回object. 现在增加了ToScalar<TResult>()方法,组件自动转换类型. 例如: DbSession.Default.From<Products>().Select(Products._.ProductID).Top (1).ToScalar<int>(); 这样就返回类型为int类型,免去转换的代码. 当查询出来的值为nul