Javascript 多表查询的结果是非数组的数组

Javascript 多表查询的结果是非数组的数组,javascript,arrays,breeze,Javascript,Arrays,Breeze,多表查询的结果数据(请参阅)与我预期的不完全相同。我需要一个数组(每个表的项)和一个数组(实体字段)。但是,我得到的是一个数组。正如预期的那样,外部数组中为每个表填充了一个项。但是,内部对象不是数组类型。实际上,它们的成员名称与索引项(0、1、2,…)类似,但由于它不是数组,所以不能使用length或forEach。这是微风中的虫子吗 请注意,当我从一个表中查询项时,结果类型为数组(实体字段的数组) 这是我的服务器代码: [HttpGet] public object _Combo() {

多表查询的结果数据(请参阅)与我预期的不完全相同。我需要一个数组(每个表的项)和一个数组(实体字段)。但是,我得到的是一个数组。正如预期的那样,外部数组中为每个表填充了一个项。但是,内部对象不是数组类型。实际上,它们的成员名称与索引项(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);

我不完全确定通过查看“\u组合”代码,您希望返回什么“形状”?但是,如果它是包含公司、项目和项目区域的anon类型,那么下面的代码应该可以使用。除非计划在服务器上应用客户端筛选器,否则不需要返回IQueryable

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

}

这将返回一个元素数组,其中一个元素包含一个具有三个属性的对象:“公司”、“项目”和“项目区域”。其中每一个都是对应实体的数组。所有这些实体都将被添加到entityManager中。希望这有帮助

您编写服务器代码时返回的东西的形状是正确的;它不是一个数组,而是一个名为“0”、“1”、“2”等属性的散列。我自己对此感到惊讶。您将在DocCode中找到您的方法示例(请参见
NorthwindController.LookupsArray
)。它是一个bug还是一个特性:)?虽然这是可以生存的(您可以迭代散列的属性),但我更喜欢的方法(也在DocCode中作为
Lookups
)是Jay在回答中描述的方法。