惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
Cisco Talos Blog
Cisco Talos Blog
AI
AI
L
LINUX DO - 最新话题
H
Heimdal Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The GitHub Blog
The GitHub Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
S
Securelist
博客园_首页
IT之家
IT之家
Schneier on Security
Schneier on Security
博客园 - 叶小钗
罗磊的独立博客
WordPress大学
WordPress大学
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
The Register - Security
The Register - Security
D
DataBreaches.Net
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
Recorded Future
Recorded Future
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tailwind CSS Blog
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
T
Tor Project blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com

博客园 - I,Robot

短网址的简单实现 怎样在前端Javascript中调用C#方法(4)验证授权 怎样在前端Javascript中调用C#方法(3)使用特性Attribute 怎样在前端Javascript中调用C#方法(2)传递参数(附源码+高手勿入) 怎样在前端Javascript中调用C#方法(1)简单实现(附源码) 闲来无事,写了段js仿google首页动画,附源码下载 终于请了个客服值夜班了,嘿嘿,不是18K月薪 我的编程之路 说再见的那一刻,我都不敢回头多看你们一眼… 趣味算法:国王和100个囚犯(据说是腾讯的面试题) 提交备案申请4年后,网站备案号终于下来了,可惜网站跟域名早已不见了 我的山寨HTC(5)-电池 我的山寨HTC(4)-U盘 我的山寨HTC(3)-WIFI 我的山寨HTC(2)-GPS 我的山寨HTC(1)-购机 eBay中国上海总部之行20091020 eBay中国2009开发者论坛上海之行 在一个没有爱心的城市,谈何文明,谈何和谐
终于解决了”SQL多表连接查询C#化”这的问题
I,Robot · 2010-08-31 · via 博客园 - I,Robot

一直以来,涉及到多表查询操作时,原有的框架都需要自定义SQL语句或视图/存储过程来解决,一直想解决掉这个问题,但一直没腾出精力来,这个问题看似不痛不痒,但放在一边又始终是个问题,心里总是有些不爽.这几天花了点时间仔细研究了一下这个问题,似乎有了点思路,于是,出来了一个Joinner类.

主要解决的问题:

1.表别名问题 

2.字段别名问题.

3.实体映射信息缓存问题.

4.映射信息获取的问题.

问题1/3是有关联的,因为映射信息跟表别名都涉及到数据表的信息,所以最后的解决办法是将映射信息复制一个新的实例出来,这样设置别名时就不会影响到原来的表了.

问题2比较简单,字段映射的类再扩展出一个别名字段映射的类加上别名属性就可以了,或者直接在字段映射信息的类中加上一个别名属性也是可以解决的.

问题4,因为所有的业务类都是继承自同一基类,而基类又是一个泛型类,所以在取业务类中的映射信息时碰到了点小问题.最后的解决办法是给业务基类定义一个接口IJoinAvailable,定义一个方法,返回映射信息就可以了.

最终使用的效果如下:

 

var join = new Joinner<User,Grade>((joinner,usr,gd)=>joinner
  .Select(usr.ID,usr.UserName,usr.Password,gd.Name.As("GradeName"))
  .From(usr)   

.LeftJoin(gd).On(usr.Grade,QueryOperate.Equal,dg.ID)
.Where(usr.State.Equal(1)) 
.OrderBy(usr.ID.Desc))

 将实例join传给业务类的方法处理,就可以得到指定的数据了,目前可以解决项目中大部分连接查询的问题,算是不错了.

 这个问题压抑了我很久,解决了它之后有种如释重负的感觉(虽然还负了很重),所以随手记录一下.