ATK 设计框架 之 Atk.CustomExpression

在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

转载于:https://www.cnblogs.com/athinker/p/9695669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值