2009-07-29 44 views
1

我想在兩個表(BusinessUnit和UserBusinessUnit)上執行簡單連接,因此我可以獲得分配給給定用戶的所有BusinessUnits的列表。subsonic 3簡單查詢內部連接sql語法

第一次嘗試的作品,但沒有選擇的覆蓋,讓我來限制返回的列(我得到的所有列從兩個表):

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); 

第二attept使列名的限制,但生成的SQL包含pluralised表名(?)

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 pluralise在生成的SQL列名(我可以避開這個問題?)

我使用3.0.0.3 ...

回答

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

我遇到了複數d表名是我自己的,但是這是因爲我只會在進行模式更改後重新運行一個模板。

一旦我重新運行所有模板,複數表名就會消失。

嘗試重新運行所有4個模板,看看是否能爲你解決它。