1

我想在两个表(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 ...

4

2 回答 2

2

到目前为止,我对 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;
于 2009-08-01T04:24:05.203 回答
1

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

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

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

于 2009-08-17T21:21:08.737 回答