• 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图(数据库模型图)刚好相反.

  • 相关阅读:
    larave5.6 引入自定义函数库时,报错不能重复定义
    laravel获取当前认证用户登录
    淘宝免费ip地址查询导致服务堵死的坑
    this关键字
    Jsp Spring Security 权限管理系统
    spring secrity
    spring bean何时实例化
    Spring Security3 页面 权限标签
    Spring常用注解,自动扫描装配Bean
    java继承时,实例化子类,是否会默认调用父类构造方法
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1340338.html
Copyright © 2020-2023  润新知