在ATK-DataPortal框架中的xxxHandel中常用到的一种类型,形如:

1、protected virtual D ItemHandle(D item, Func<E, E> dataportalhandle, ExpConditions<D> znexp)

{

E bllitem = item.CopyToIn();

ApplyContext(bllitem);

bllitem.Criteria = BusinessCriteria.BusinessCriteriaCreate(znexp);

bllitem = dataportalhandle(bllitem);

return item.CopyToOut(bllitem);

}

2、 public ExpConditions<D> GetExp()

{

return new ExpConditions<D>();

}

以上两例中的 ExpConditions<D>  是定义在 Atk.CustomExpression库中。ExpConditions<D>是一个Lambda表达式转SQL语句的功能类。

在分布式环境中,数据层到业务层的访问往往需要在不同物理层中传输。在.NET中常见的ORM是EF,EF的功能和优点不在本文描述之内,EF本现一进程中传递时,是没有任何问题的,但在不同物理层中,需要通过WCF之类的服务来传输时,问题就显而易见,EF的序列化和反序列化在WCF不易实现,同时在多层设计中,前端的类型过重的传入到数据层也是不合理的,容易形成强绑定,不合符分布设计中服务自治原则。如果不能解决好跨进程跨服务问题,应用就很可能是常见的三层结构,且前后端存在类型强绑定。我们习惯用强类型来编程,这样在类型检查、变更时会有很大的使得。

Atk.CustomExpression库能将将我们在前端所使用的Lambda表达式转SQL子句。SQL子句是string类,这样在序列化和反序列化就变得很容易,只要我们的数据层支持支持使用SQL来操作作数,EF和System.Data.SqlClient都是支持执行原始sql语句操作的。

Atk.CustomExpression库

一、可以达到的功能

本功能类库主要提供给代码中使用Lambda表达式,后需转成SQL的条件语句这一需求

二、不能做的

1、本类库不能解析Linq语句

2、不能解析SQL中的Select部分

例1:

class A

{

public Int16 Id { get; set; }

public string name { get; set; }

public string sex { get; set; }

}

ExpConditions<A> expa = new ExpConditions<A>();

expa.AddAndWhere(s => s.Id == 123 && s.name.Contains("a"), Alias.a2);

expa.UpdateFields(s => new { s.Id, s.sex }, Alias.a2);

结果生成下列两个语句:

1、Where (([a2].[Id] = 123) and ([a2].[name] LIKE '%' + 'a' + '%'))

2、[a2].[Id] = @Id,[a2].[sexA] = @sex

例2:

// 当需要多子句拼接时,自动合并成合适的子句,如 Where ,不会出现多个“where”关键词。

ExpConditions<A> expa2 = new ExpConditions<A>();

if (1==1)

{

expa2.AddAndWhere(s => s.Id == 123);

}

if (2==2)

{

expa2.AddAndWhere(s => s.name.Contains("a"));

}

结果生成下列两个语句:

Where ([a0].[Id] = 123) And ([a0].[name] LIKE '%' + 'a' + '%')

----

ATK

1、一个完整支持分布式服务框架;

2、代码生成工具,可快速生成基于服务框架的应用;

3、其他支持库

4、完整代码可在GitHub的https://github.com/azthinker ;开源中国 https://gitee.com/azthinker

目标:使应用开发,低代码、高效率、快迭代

有兴趣的请在QQ群中参与讨论、联系作者  QQ群名称:ATK高效开发 ,QQ群号:747049962

也可发邮件至:azthinker@sina.com

Demo中的数据库、编译好的代码工具链接:https://pan.baidu.com/s/1B9RQm7_-SFyhLb_HLIGs0w 密码:85q6

ATK Demo使用的数据库 : https://download.csdn.net/download/xftyyyyb/10675497

ATK自动代码工具 :https://download.csdn.net/download/xftyyyyb/10675490

最新文章

  1. py-faster-rcnn之从solver文件创建solver对象,建立pythonlayer
  2. JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
  3. 使用syncthing进行双机文件同步
  4. BFS+Hash(储存,判重) HDOJ 1067 Gap
  5. 用T-sql 实现Oracle Connect by 的功能
  6. CMMI整体理解
  7. c#委托之最大
  8. Net中的AOP
  9. 一个请求过来都经过了什么?(Thrift版)
  10. QT汇总
  11. git与eclipse集成之代码提交
  12. zoj3471 状态压缩dp基础
  13. H5 唤起 APP的解决方案
  14. Java如何获取URL的部分?
  15. 静态文件link 数据库迁移命令 新建app命令
  16. 从caffemodel里面导出参数
  17. shell script auto generate the relevant header information
  18. 前端基础之css介绍
  19. 读高性能JavaScript编程 第四章 Duff&#39;s Device
  20. POJ1269求两个直线的关系平行,重合,相交

热门文章

  1. 2018湖湘杯web、misc记录
  2. java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE 的理解
  3. c# 使用队列保存图片
  4. vsCode代码缩略图
  5. WPF的项目,ListBox 纵向滚动条不显示
  6. C# Attribute应用:类签名
  7. POJ 3225 线段树区间更新(两种更新方式)
  8. java线程安全问题原理性分析
  9. 有关background 背景图片不能显示
  10. MFCdll的两种调用方法