Breeze实体的子集合的查询结果

Breeze实体的子集合的查询结果,breeze,Breeze,我正在尝试使用Breeze执行一个查询,该查询将返回筛选的子实体选择。我有两个自定义DTO,定义如下: #区域Dto模型 公共类产品{ public int ProductDtoId{get;set;} public int ProductClassId{get;set;} 公共ICollection RequiredInputs{get;set;} } 公共类产品需要输入到 { public int ProductRequiredInputDtoId{get;set;} 公共字符串乘积{get

我正在尝试使用Breeze执行一个查询,该查询将返回筛选的子实体选择。我有两个自定义DTO,定义如下:

#区域Dto模型
公共类产品{
public int ProductDtoId{get;set;}
public int ProductClassId{get;set;}
公共ICollection RequiredInputs{get;set;}
}
公共类产品需要输入到
{
public int ProductRequiredInputDtoId{get;set;}
公共字符串乘积{get;set;}
公共字符串容量{get;set;}
公共字符串电气{get;set;}
//导航属性
公共虚拟产品to ProductDto{get;set;}
}
#端区
我的第一个查询是简单地将填充的ProductDto返回到模型

var query1a=this.entityQuery.from('ProductModel'))
返回this.entityManager.executeQuery(query1a)//返回一个承诺
.then(数据=>{this.product=data.results}
当我调用我的web api控制器时,一切都按预期工作,因为我收到一个单一的ProductDto模型,其中填充了ProductRequiredInputTo模型的集合。下面是一个示例:

0:ProductDto\uuIpe\u数据模型 ProductClassId:1 ProductDtoId:1 所需输入:数组[40] _backingStore:对象 ProductClassId:1 ProductDtoId:1 所需输入:数组[40]


现在,我试图实现的是对ProductDto模型执行第二次查询,该查询将从RequiredInputs属性返回ProductRequiredTo模型的筛选数组。我已经查看了Breeze示例和示例,但未能找到此特定问题的解决方案。

简短回答:不,我不认为你是可以从EntityQuery中筛选ICollection导航属性

详细回答:您可以在使用.Include(“RequiredInputs”)的控制器上编写自定义方法,并且可以使用LINQ在控制器上执行所需的筛选


旁白:我觉得奇怪的是,ProductRequiredInputTo对象上没有ProductDtoID属性。

调用检索ProductDto的函数是绝对必要的吗?因为我觉得这听起来不合逻辑。我会创建一个控制器函数:

    [HttpGet]
    public IQueryable<ProductRequiredInputDto> ProductRequiredInputDtos()
    {
        return _contextProvider.ProductRequiredInputDto;
    }

Jonathan的方法也会起作用,但是对于一种类型的调用,您有一个专门的控制器函数,这些函数会很快堆积起来(除非您通过接收参数使它们变得通用,但这是另一回事)。通过这种方式,您可以从客户端对此模型执行任何查询,而不会使控制器混乱。

我也习惯于手动创建外键id,并将其定义为外键,但我相信新版breeze足够聪明,可以解决此问题并自行创建一个。我个人仍然更喜欢手动定义并知道它存在尽管如此。
var idPredicate =  breeze.Predicate.create('id', '==', yourSelectedProductDtoId);
var yourPredicate = breeze.Predicate.create('yourProductRequiredInputDtosProperty, 'yourOperator, 'yourValue');
var query = entityQuery.from('ProductRequiredInputDtos').where(idPredicate).and(yourPredicate);