哲学原理什么用ORM支持SQL语句之CASE WHEN?

by admin on 2018年11月17日

序言:此文写于去年六月,离开学校的立刻同样年,走之跌跌撞撞,哭了,也乐了,挣扎了,也隐约过;而今天底自身较以前又明了自己想走的里程,人生没有白走的路途,每一样步都算。

OQL如何支撑CASE WHEN?

今日,一个情侣咨询我,OQL可也支持CASE WHEN语词?他于的演示SQL如下:

select HName,case when IsEnable=1 then '启用' else '停用' from tb_User

OQL是SOD框架的ORM查询语言,它仿佛Linq,但是它们落地之史比较Linq早,并且更加类似SQL语法。所以,对SOD框架而言,对应ORM如何支持CASE
WHEN,就相当于是问OQL如何支持CASE WHEN了。

本条问题一度持续这一个有情人来提问我了,我想了产,还是拿此题材的解决写一首博客,给大家一致种新的缓解方案。
专注“新的方案”这个讲法,我是免打算给OQL支持CASE
WHEN这个特点的,为何要这样做呢?

  1. OQL只解决
    80%的平常查询,其它复杂的查询,应该依托于外技术,否则会增多OQL的繁杂;
  2. 复杂的查询,可以靠SOD框架的SQL-MAP技术,将SQL语句写于SqlMap.config文件中;
  3. 得使用数据库视图或者表底计算列,但多少数据库可能不支持计算列;

前方3种植由,第2,3漫长办法也足以看成是这个问题的化解方案,但是其还待多又多之工作量,如果OQL能够直接支持或再次有益于把,所以,我今天于此地让大家第4种植缓解方案:

小日子似箭,五年的高校生活已接近尾声。临毕业前,回顾当时段最美好的年轻时光,我第一做的老三码事:一是成同名叫学童记者,与校媒一起成人;二凡是分享当图书馆阅读的童趣,博览群书;三是好独立更生,体验生活的而为提升自己。

实体类的计量属性

废话不多说,先直接看代码:

public class User:EntityBase
{
  public User()
  {
      TableName="tb_User";   
  }

  public string HName{
    get{return getProperty<string>("HName");}
    set{setProperty<string>("HName",value,50);}
  }

  public bool IsEnable{
    get{return getProperty<bool>("IsEnable");}
    set{setProperty<bool>("IsEnable",value);}
  }

  public string IsEnableDescrition
  {
     get{
        return IsEnable?"启用":"停用"
     }
   }

}

在此处,HName,IsEnable
这样的性能,SOD框架称为“持久化属性”,因为它MAP了Tb_User表的字段IsEnable
,该字段称为“持久化属性字段”。

持久化属性之get,set方法运用了SOD实体类特殊之办法 setProperty,getProperty
构造,所以属性IsEnableDescription
它不是持久化属性,但是它们采取了IsEnable这个持久化属性,对持久化属性进行“计算”,因此,我们这边名为这样的属性为实体类的“测算属性”。

大家看,这个“计算属性”是勿是怪好之自及了 SQL的CASE WHEN效果?

一经忘记了数据库,不要碰到题目就是夺思怎么用SQL语句解决,是未是思路豁然开朗?

老三年生记者的阅历是自家大学时的画卷里最好浓墨出彩的一律笔画。虽然专业上及情报多不在限,却因头的亲笔梦和新闻做。回想从极度开头懵懂冒失地采访错对象到新兴为写好同一篇稿子呕心沥血,那是年轻里最好美好的上,它见证着自同的成长。在即时三年里,我一度于《中国青年报》福建记者站和《福建日报》东南网等报社实习,发表近五十篇新闻稿件,参与北京车展、贵州惠行动、海峡青年节等省上下的搜集和调研活动。认识世界之同时,也对前景来更明亮的体味。

以“计算属性”来支持CASE WHEN效果

前说过,实体类的“计算属性”本质上无是一个“持久化属性”,它是对持久化属性之计量处理,原理及异常接近SQLServer表上面的计算列。
之所以,在SOD框架达成运“计算属性”,有一个要小心的规范:“计算属性”不可以起于OQL语句被。

实际举例来说,应该像下的师来用含计算列的实业类:

User user=new User(){ HName="张三"};
var q=OQL.From(user)
  .Select(user.HName,user.IsEnable)
  .Where(user.HName)
.END;

User user2= EntityQuery<User>.QueryObject(q);
string isEnableDesction =user2.isEnableDesction;

自家非常感谢大学中能够成《中国青年报》高级记者陈强的实习生,他传授教导给自己的不仅是新闻做之技能,更是为人处世的准。一个丁能活动多远,在于他以及谁当合。与好的人数同行,定会让好更漂亮。而自我多么有幸,大学中会通陈老师跟国内各个大高校的旁良好校媒人这么的良师益友同行。即便我不够理想,但“见贤思齐焉”,我直接极力当向阳她们视。

使用“ViewModel”来支持CASE WHEN效果

若还细致瞧开篇之这SQL语句,我们发现这种写法常常和咱们的界面查询有关,也不怕是是查询而用本的结果进行一下加工,以方便界面元素使用。对承诺这种需要,我们日常想到的法子是描摹一个ViewModel来定制者查询结果。实际上,前面老SOD实体类就是一律栽ViewModel,但其是根据实体类及之ViewModel,之外,SOD也支撑直接以查询结果映射到ViewModel。

故,前面的实体类需要转移写成下面这法:

public class User:EntityBase
{
  public User()
  {
      TableName="tb_User";   
  }

  public string HName{
    get{return getProperty<string>("HName");}
    set{setProperty<string>("HName",value,50);}
  }

  public bool IsEnable{
    get{return getProperty<bool>("IsEnable");}
    set{setProperty<bool>("IsEnable",value);}
  }

}

此地失去丢了前方的“计算列属性”,它用就此一个匿名类型的性质来代表:

User user=new User(){ HName="张三"};
var q=OQL.From(user)
    .Select()
    .Where(user.HName)
.END;

 PWMIS.DataProvider.Data.AdoHelper db = PWMIS.DataProvider.Adapter.MyDB.GetDBHelper();
 EntityContainer ec = new EntityContainer(q, db);
 var list = ec.MapToList()(()=> return new
     {
        HName = user.HName,
        IsEnableDescription =user.IsEnable?"启用":"停用"
     });

 

此间的匿名类型受到寓了 IsEnableDescription
一个性质,同时我们的OQL查询也不再要在Select里面指定询问的属性,而是推迟到MapToList方法中。

方这种查询艺术,同样支撑了咱标题的要求,可见,SOD对一个询问问题,往往能够提供多化解方案,“条条道路连接罗马”,这正是SOD的宏图谏言。

—————分界线——————————————————————————–

关于地方SOD框架查询利用的入门介绍,大家可参考《.NET ORM 的
“SOD蜜”–零基础入门篇

谢大家对SOD框架一直以来的支持,更多信息,请参考 PDF.NET SOD
开源框架红包派送活动 &&
新手快速入门指引

开源项目用大家再也多的支持,SOD开源项目网站:http://pwmis.codeplex.com

公现在底气度,藏在您走过的路,读了的修以及爱了之总人口里。图书馆是自我自小就向往的天堂,我渴望能够于文化之殿堂里随机飞翔。虽然学习成绩并无过分拔尖,但自身也尽享受阅读之意,各类的杂文书刊报纸还是自身浏览的对象,至今自己就养成每天最少看两时以上之惯。

“授人以鲜鱼勿若授人以渔”,大学之课程不同于中学阶段,只依靠课堂上的任道是远远不够的。我上大学的目的就是是使学会“渔”,懂得用上道获得更多学问。我喜欢课后每当图书馆查阅各类资料钻研,以便对征收上之知识点有重深切的认,丰富课外知识。经过日积月累,我之就学能力为产生矣一个抵的高速,能比较快地控制一栽新的技能知识。

翻阅,贵于单独思考,而无人云亦云。正使德国哲学家叔本华说的,一栽纯粹因看学来之真理,与我们的干,就像假肢、假牙、蜡鼻子甚或人工植皮。而由单独思想获得的真谛就使我们自然的四肢:只有它才属于我们。真理不是由他人白字黑字地报告我们的,而是躲于字里行间,需要我们日益探索才能够取得之。只有经过独立的思,反复的领悟,才是真的真谛。也多亏这种独立思考的精神,让自己去年如愿以偿经国家司法考试。

每当国外的无数发达国家,小孩成长到18年份就是必须搬离家里,半工半读,这不单是利于培养孩子的一应俱全腾飞,而且有益于提早增进他们针对社会之体会。大学期间,我靠着到校勤工俭学,撰稿挣得的稿费,以及部分家教等兼活动自立自强。我道谢那些生活里的卖力,即便在又紧,也能坚持坚持。也巧因这些努力,让我更是正视生命的贵重,明白在的艰难,理解老人之麻烦。

“纸上得来算觉浅,绝知此事而躬行。”新时代“两而已不难闻窗外事,一心只读圣贤书”的人头究竟会叫裁,社会要的凡“家事、国事、天下行,事事关心”的时接班人。我盼望生同等龙,我们的二老也会通往海外的爹娘看看,让子女学会独立成长,才能够早日成才。

于高校里,没有丁报告你什么是针对之啊是错的。也远非人报你哟坏之,什么是好之。这五年里,我见到了教室里学术争论时之利害和热情;我哉看出了社会实践时犹豫不决于马路上的怯懦和失落。我看来了图书馆里白天黑夜的坚持不懈和追求;我啊盼了宿舍里显示器上的自残和腐败。我瞅了校园艺术节上年轻的绚烂和花;我也看出每天睡觉到自然醒的干瘪和平淡。这些强烈的比只有留下我们和好失去思考。也只有当这里面我们才会体味到什么是成材什么是存。

高校里最好酷之获取是心理的成熟,一千差不多单生活里曾经徘徊过,也早已失落了;曾平静过,也早就疯狂疯过;曾于卑过,也已自信了。而今日晓得无论前途是日光大道还是羊肠小路,都必抬头挺胸往前头跨。自己选的程,跪着啊使走了事。路上的掣肘,每爬过了同样次于,便离开梦想再靠近了同一步,让祥和之学问水平,思想品德,工作力量相当于地方都踏上上了一个新的阶梯。

将告别大学时光,迎接另一个崭新的也罢重具有挑战的活着。在这个,我怀念引用李安导演当《少年派的新奇漂流》的同样词台词来告别我之高等学校生活。“All
our life is act letting go, but what hurts the most is nottaking the
moment to say good
bye.(人生即使是教会我们连的学会放下,遗憾的凡终极我们且未曾好好地游说再见。)

个人简介:胃窦,90继文学爱好者,略通歧黄之术。坚信灵魂与皮囊可以握手和,面子和里子的朴。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图