【问题标题】:Subsonic 3 Simple Query inner join sql syntaxSubsonic 3 简单查询内连接 sql 语法
【发布时间】:2009-07-29 08:59:06
【问题描述】:

我想对两个表(BusinessUnit 和 UserBusinessUnit)执行简单的联接,这样我就可以获得分配给给定用户的所有 BusinessUnit 的列表。

第一次尝试有效,但没有覆盖 Select 允许我限制返回的列(我从两个表中获取所有列):

var db = new KensDB();
SqlQuery query = db.Select
 .From<BusinessUnit>()
 .InnerJoin<UserBusinessUnit>( BusinessUnitTable.IdColumn, UserBusinessUnitTable.BusinessUnitIdColumn )
 .Where( BusinessUnitTable.RecordStatusColumn ).IsEqualTo( 1 )
 .And( UserBusinessUnitTable.UserIdColumn ).IsEqualTo( userId );

第二次尝试允许列名限制,但生成的sql包含复数表名(?)

SqlQuery query = new Select( new string[] { BusinessUnitTable.IdColumn, BusinessUnitTable.NameColumn } )
 .From<BusinessUnit>()
 .InnerJoin<UserBusinessUnit>( BusinessUnitTable.IdColumn, UserBusinessUnitTable.BusinessUnitIdColumn )
 .Where( BusinessUnitTable.RecordStatusColumn ).IsEqualTo( 1 )
 .And( UserBusinessUnitTable.UserIdColumn ).IsEqualTo( userId );

生产...

SELECT [BusinessUnits].[Id], [BusinessUnits].[Name]
 FROM [BusinessUnits]
 INNER JOIN [UserBusinessUnits]
 ON [BusinessUnits].[Id] = [UserBusinessUnits].[BusinessUnitId]
 WHERE [BusinessUnits].[RecordStatus] = @0
 AND [UserBusinessUnits].[UserId] = @1

所以,有两个问题:
- 如何限制方法 1 中返回的列?
- 为什么方法 2 将生成的 SQL 中的列名复数(我可以绕过这个吗?)

我正在使用 3.0.0.3...

【问题讨论】:

    标签: subsonic subsonic3


    【解决方案1】:

    到目前为止,我使用 3.0.0.3 的经验表明,使用查询工具尚无法实现这一点,尽管使用版本 2。

    我认为(到目前为止)版本 3 的首选方法是使用 linq 查询,例如:

    var busUnits = from b in BusinessUnit.All()
    join u in UserBusinessUnit.All() on b.Id equals u.BusinessUnitId
    select b;
    

    【讨论】:

      【解决方案2】:

      我自己也遇到了复数表名,但这是因为我在进行架构更改后只重新运行一个模板。

      一旦我重新运行所有模板,复数表名就消失了。

      尝试重新运行所有 4 个模板,看看是否能解决问题。

      【讨论】:

        猜你喜欢
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 2016-03-29
        相关资源
        最近更新 更多