2013-03-13 21 views
0

多表查詢的結果數據(請參閱http://www.breezejs.com/documentation/query-examples#Lookups)並不完全符合我的預期。我期待數組(實體字段)的數組(實體字段)的數組(實體的數據項)。但是,我得到的是一組數組。外部數組是 - 如預期的 - 填充每個表的項目。但是,內部對象不是以Array的形式輸入的。他們確實有成員像索引項(0,1,2,...)一樣命名,但由於它不是數組,我不能使用length或forEach。這是微風中的一個錯誤嗎?多表查詢的結果是非數組的數組

請注意,當我查詢一個表中的項目時,結果被輸入爲數組(實體字段)。

這裏是我的服務器代碼:

[HttpGet] 
public object _Combo() 
{ 
    return new IOrderedQueryable[] { _contextProvider.Context.Company, _contextProvider.Context.Project, _contextProvider.Context.ProjectArea }; 
} 

這裏是我的客戶端代碼:

entityManager.executeQuery(breeze.EntityQuery.from("_Combo")) 
    .then(function (data) { 
     var companies = data.results[0]; 
     //companies is not an array, but does have numbered members! 
    }).fail(queryFailed); 
+0

對於服務器代碼在您編寫時返回的東西的形狀是正確的;它不是一個數組,而是一個名爲「0」,「1」,「2」等屬性的散列。我對此感到驚訝。您可以在DocCode中找到您的方法示例(請參閱'NorthwindController.LookupsArray')。它是一個錯誤或功能:)?雖然這是可以生存的(你可以迭代散列的屬性),但我更喜歡的方法(也是在DocCode中稱爲「Lookups」)是Jay在他的回答中描述的方法。 – Ward 2013-03-17 06:22:02

回答

0

我不能完全確定要由看你的「_Combo」代碼返回了什麼「形」?但如果它是一個包含公司,項目和ProjectAreas的匿名類型,那麼以下內容應該可以工作。除非您計劃在服務器上應用客戶端過濾器,否則不需要返回IQueryable。

[HttpGet] 
public object _Combo() 
{ 
    return new { Companies = ContextProvider.Context.Company.ToList(), 
       Projects = ContextProvider.Context.Project.ToList(), 
       ProjectAreas = ContextProvider.Context.ProjectAreas.ToList() } 

} 

這將返回一個包含對象與它的一個項目的單個元件陣列具有三個屬性:「公司」,「項目」和「ProjectAreas」。其中每一個都是相應實體的數組。所有這些實體都將被添加到entityManager中。希望這可以幫助。