我想在两个表(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 ...
答案 0 :(得分: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;
答案 1 :(得分:1)
我自己遇到了复数表名,但这是因为我只是在进行架构更改后重新运行一个模板。
一旦我重新运行了所有模板,复数表名就消失了。
尝试重新运行所有4个模板,看看是否能解决这个问题。