zoukankan      html  css  js  c++  java
  • Subsonic中的inner join操作

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

     注意,为保证生成正确的SQL语句,在Subsoinc中需要交叉放置两张表的位置,即From<xxx>.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() + "<br>");

            q = new Select("Name", "RuleId").From<KWSTool.DAL.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图(数据库模型图)刚好相反.

  • 相关阅读:
    启智树提高组Day4T3 2的幂拆分
    拉格朗日插值
    #3342. 「NOI2020」制作菜品
    P6776 [NOI2020]超现实树
    P6773 [NOI2020]命运
    P5298 [PKUWC2018]Minimax
    每日总结5.20
    每日总结5.19
    每日总结5.18
    每日总结5.17
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1340338.html
Copyright © 2011-2022 走看看