现在的位置: 主页 > 在线留言 > 文章列表

.net下开源轻量级ORM框架Dapper扩展系列2

作者:石家庄绿之洲商贸有限公司 来源:www.365tt315.com 未知发布时间:2017-09-03 12:21:32
.net下开源轻量级ORM框架Dapper扩展系列2

> Web开发 > ASP.Net > 正文 .net下开源轻量级ORM框架Dapper扩展系列2 2014-01-14 我要投稿 在上次的扩展中,有朋友对代码和性能提出了一些批评。因此在今天扩展前我先说明:

我遇到问题,是先解决,再谈优化,如果问题都不能解决,何来优化。所以在全部扩展完成之后,我会进行一次代码重构和一些性能优化(当然是在自己技术能力范围内的哈)

所以暂时我们先放下代码和性能问题,先着手解决问题。

喜闻乐见的扩展又开始了GO

今天目标:查询扩展

想到组装条件查询语句,开始想的是定义类,用树形结构来表示每一个条件单元(意思是:括号包含的条件,例如:where (id<>''))

但是想到这样处理后,其实在编码使用上会觉得别扭(反正我不习惯),我决定要用括号时自己调用方法直接组装,这样也灵活,逻辑也不复杂。

查询少不了操作符,所以有了如下几个类

枚举:OperationMethod,定义SQL中操作符

View Code

排序类:QueryOrder,用于排序处理

View Code

现在,我们思考一个问题:Dapper的参数化查询是这样:

请注意后面的参数,是一个匿名类,如果要使用这样的查询,我们就必须对参数动态的创建类,如果动态对参数创建类,我们用emit

定义类:DynamicPropertyModel,此类用于保存每一个动态创建的参数的名称和类型

View Code

定义动态创建类:CustomDynamicBuilder,用于动态创建参数类

View Code

有了以上基础,定义类:SqlQuery,用于组装WHERE条件

View Code

基础工作完成后,接下来就写扩展方法:

View Code

最后是测试方法:

复制代码

[TestMethod]

public void QueryNoWhere()//无条件的查询,相当于GetAll

{

using (var db = CreateDbBase())

{

var result = db.Query<Account>();

Console.WriteLine("查询出数据条数:" + result.Count);

}

}

[TestMethod]

public void Query()//条件查询

{

using (var db = CreateDbBase())

{

var d = SqlQuery<Account>.Builder(db).AndWhere(m => m.Age, OperationMethod.Less, 20)

.LeftInclude()//此表示左括号,所以后面必须有右括号与之对应

.AndWhere(m => m.CreateTime, OperationMethod.Greater, DateTime.Now.AddDays(-5))

.OrWhere(m => m.Name, OperationMethod.Contains, "张")

.RightInclude()//右括号

.Top(10)//前10条

.AndWhere(m => m.Age, OperationMethod.In, new List<int>() { 15 })

.OrderBy(m => m.Age, true);

//WHERE Age < @para_1 AND ( CreateTime > @para_2 OR Name LIKE @para_3 ) AND Age IN @para_4 ORDER BY Age DESC

var result = db.Query<Account>(d);

Console.WriteLine("查询出数据条数:" + result.Count);

}

}

点击复制链接 与好友分享!回本站首页 您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力 上一篇:Net读取Excel 返回DataTable 下一篇: 相关文章

.NET下的jQuery UI 开源控件

使用开源免费类库在.net中操作Excel

开源.NET FTP组件edtFTPnet 用法

Redis .NET开源组件Beetle.Redis

ASP.NET 2.0页面框架的几处变化

微软的远程处理框架.NET Remoting - 1

微软的远程处理框架.NET Remoting - 2

利用.NET框架简化发布和解决DLL Hell

利用.NET框架简化发布和解决DLL Hell

asp.net三层框架的简单理解

图文推荐

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:襄阳网站建设公司 https://www.jingchucn.com/zt/xiangyang_wangzhanjianshe/

上一篇:Net读取Excel 返回DataTable 下一篇:最后一页