Subsonic中的inner join操作

    技术2025-01-09  20

     

    有如下两表,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图(数据库模型图)刚好相反.

    最新回复(0)