2013-03-13 22 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中。希望这可以帮助。