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

时间:2013-03-13 16:15:58

标签: javascript arrays breeze

多表查询的结果数据(参见http://www.breezejs.com/documentation/query-examples#Lookups)并不完全符合我的预期。我期望数组(实体字段)的数组(每个表的项)。但是,我得到的是一系列排序数组。外部数组 - 正如预期的那样 - 填充每个表的项目。但是,内部对象不是类型化的数组。它们实际上有成员命名为索引项(0,1,2,...),但由于它不是数组,我不能使用length或forEach。这是Breeze中的一个错误吗?

请注意,当我从一个表中查询项目时,结果将被输入为数组(实体字段)。

这是我的服务器代码:

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

1 个答案:

答案 0 :(得分: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() } 

}

这将返回单个元素数组,其中一个项目包含一个具有三个属性的对象:“Companies”,“Projects”和“ProjectAreas”。每个都是相应实体的数组。所有这些实体都将添加到entityManager中。希望这可以帮助。