Subsonic中的inner join操作

本文介绍如何使用Subsonic ORM进行多表关联查询,特别是针对多对多关系的表,并展示了两种不同的SQL生成方式。同时,文章还提到了.NET 3.x的Linq to SQL在处理多对多关系时的特殊表示方法。

 

有如下两表,Rule跟,RuleGroup, RuleGroup是 Rule表与Group表的关联表(Rule,跟 Group为多对多关系),应此,RuleGroup到Rule应该为 n:1(多对一)反之为一对多关系,现在对两张表做innerjion操作,使用Subsonic可以有如下两种写法.

 注意,为保证生成正确的SQL语句,在Subsoinc中需要交叉放置两张表的位置,即From .InnerJoin(yyy,xxx)...
其中xxx,yyy表示RuleGroup,或Rule表. 如果不是交叉放置那么将生成 xxx innerjoin xxx on xxx.nn=yy.nn 这样的SQL语句

  代码如下:

     SqlQuery q = new Select("Name", "RuleId").From<RuleGroup>().InnerJoin(KWSTool.DAL.Rule.IdColumn, RuleGroup.RuleIDColumn).Where("groupid").IsEqualTo(1);
        Response.Write(q.ToString() + "
");

        q = new Select("Name", "RuleId").From Rule>().InnerJoin( RuleGroup.RuleIDColumn, KWSTool.DAL. Rule.IdColumn).Where("groupid").IsEqualTo(1);
        Response.Write(q.ToString());



  输出结果:
 1:SELECT Name, [dbo].[RuleGroup].[RuleID] FROM [dbo].[RuleGroup] INNER JOIN [dbo].[Rule] ON [dbo].[RuleGroup].[RuleID] = [dbo].[Rule].[ID] WHERE [dbo].[RuleGroup].[GroupID] = @GroupID0

2:SELECT [dbo].[Rule].[Name], RuleId FROM [dbo].[Rule] INNER JOIN [dbo].[RuleGroup] ON [dbo].[Rule].[ID] = [dbo].[RuleGroup].[RuleID] WHERE groupid = @groupid0

 

 另外要说的是.net3.x 的Linq to SQL  中的 .DBML文件中会将数据库中的一对多关系(如 Rule 到 RuleGroup) 会转变成"类图"中聚合关系,表示为:Rule <>--------------->RuleGroup,即一个Rule中含有多个RuleGroup, 需要注意的是箭头的方向跟数据库ER图(数据库模型图)刚好相反.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值