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

WhereClipBuilder是在1.7.2版本中新增的一个类,用来创建WhereClip。

在之前版本多条件创建WhereClip如下:

WhereClip where = WhereClip.All;
where = where.And(Products._.ProductName.Contain("apple"));
where = where.And(Products._.UnitPrice > 1);
where = where.Or(Products._.CategoryID == 2);每增加一个条件都是生成一个新的WhereClip。

使用WhereClipBuilder如下:

WhereClipBuilder wherebuilder = new WhereClipBuilder();
wherebuilder.And(Products._.ProductName.Contain("apple"));
wherebuilder.And(Products._.UnitPrice > 1);
wherebuilder.Or(Products._.CategoryID == 2);

WhereClipBuilder是条件累加并不增 加条件而创建新实例, 从而得到重用,节省资源。

具体使用:

Northwind.From<Products>()
.Where(wherebuilder.ToWhereClip())
.ToList();

生成的sql:

Text: SELECT * FROM [Products]
WHERE (((([Products].[ProductName] LIKE @jtioerxooyxzyvsj) AND ([Products].[UnitPrice] > @txdupnwvhfznviqj))
OR ([Products].[CategoryID] = @iqgkjykstppcrqsq)))
Parameters:
@jtioerxooyxzyvsj[String] = %apple%
@txdupnwvhfznviqj[Int32] = 1
@iqgkjykstppcrqsq[Int32] = 2

下载:http://www.cnblogs.com/huxj/archive/2009/11/21/1607791.html

时间: 2024-10-30 03:09:42

数据库组件 Hxj.Data(三十二)WhereClipBuilder的相关文章

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

条件的生成都是通过对表中字段进行的. 比如: Products._.UnitPrice > 1 Products._.CategoryID == 2 这些是简单的比较. 下面来介绍通过like 模糊查询该怎么做. 先上代码, Products._.ProductName.Contain("apple") 这句等效sql就是(sqlserver) productname like '%apple%' 就是完全模糊搜索. Products._.ProductName.BeginWit

数据库组件 Hxj.Data (十九) (事务二)

对事务有进行了更新,又得去下载一下新版本,对上一版本兼容,扩充了DbTrans方法. 相比十七节(事务)中的事务写法简洁了一些.如下 using (DbTrans trans = DbSession.Default.BeginTransaction()) { trans.Update<Products>(Products._.ProductName, "apple", Products._.ProductID == 1); trans.Update<Products&

数据库组件 Hxj.Data (十六) (查询的字段)

在查询没有设置查询字段,组件默认是返回所有字段信息,即select * from table 那在查询中如何设置需要返回的字段信息呢? 在之前几节中的例子已经存在设置查询字段,是通过 select方法来设置的. 先上例子: DbSession.Default.From<Products>() .Select(Products._.ProductID, Products._.ProductName) .ToDataTable(); 这里是设置查询只返回productid和productname两

数据库组件 Hxj.Data (十五) (查询的排序、分组)

本节将讲述查询的排序(order by) 和 分组(group by). 先说排序 在分页中如果没有指定排序,组件会默认一个排序来实现分页. 例如 DbSession.Default.From<Products>() .Page(10, 2) .Where(Products._.CategoryID.SelectIn(1, 2, 3)) .ToList(); 生成的sql如下: Text: SELECT * FROM ( SELECT TOP 10 * FROM ( SELECT TOP 20

数据库组件 Hxj.Data (十四) (联合查询)

联合查询在前面的例子中已经出现过,只不过没有细说. 先来个例子吧 DbSession.Default.From<Customers>() .InnerJoin<Orders>(Customers._.CustomerID == Orders._.CustomerID) .ToDataTable(); 生成的sql Text: SELECT * FROM [Customers] INNER JOIN [Orders] ON ([Customers].[CustomerID] = [O

数据库组件 Hxj.Data (十) (输出组件执行的sql)

前面有TX留言问分页的sql是怎么样的,看完这篇你也就知道了. 组件可以输出执行的sql,方便查看sql生成的语句是否有问题. 通过注册事件来输出sql DbSession.Default.RegisterSqlLogger(database_OnLog); private string sql; void database_OnLog(string logMsg) { //保存执行的DbCommand (sql语句和参数) sql += "<br />" + logMsg

数据库组件 Hxj.Data (十八) (批处理)

批处理就是提交的脚本不是马上执行,而是到一定数量才提交. 还是先上例子 using (DbBatch batch = DbSession.Default.BeginBatchConnection()) { batch.Update<Products>(Products._.ProductName, "apple", Products._.ProductID == 1); batch.Update<Products>(Products._.ProductName,

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

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

数据库组件 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 (二十五)(数据库连接配置

本节补充讲述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