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

时间:2015-09-16 16:45:50

标签: breeze

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

#region Dto Models
public class ProductDto   {

    public int ProductDtoId { get; set; }

    public int ProductClassId { get; set; }

    public ICollection<ProductRequiredInputDto> RequiredInputs { get; set; }   
}


public class ProductRequiredInputDto
{

    public int ProductRequiredInputDtoId { get; set; }

    public string Product { get; set; }

    public string Capacity { get; set; }

    public string Electrical { get; set; }

    //Navigation properties
    public virtual ProductDto ProductDto { get; set; }

}
#endregion

我的第一个问题是简单地返回一个填充的ProductDto模型。

var query1a = this.entityQuery.from('ProductModel')
    return this.entityManager.executeQuery(query1a) // returns a promise
                    .then(data => { this.product = data.results} 

当我调用我的web api控制器时,一切都按预期工作,因为我收到一个填充了ProductRequiredInputDto模型集合的单一ProductDto模型。这是一个示例:

0:ProductDto__IPE_Data_DtoModels ProductClassId:1 ProductDtoId:1 RequiredInputs:数组[40] _backingStore:对象 ProductClassId:1 ProductDtoId:1 RequiredInputs:Array [40]

现在,我想要实现的是在ProductDto模型上执行第二个查询,该查询将从RequiredInputs属性返回ProductRequiredDto模型的过滤数组。我查看了Breeze示例和示例,但未能找到解决此特定问题的方法。

2 个答案:

答案 0 :(得分:0)

简短回答:不,我不认为您可以从EntityQuery过滤ICollection导航属性。

更长的答案:您可以在使用.Include(&#34; RequiredInputs&#34;)的控制器上编写自定义方法,您可以使用LINQ在控制器上执行所需的过滤。

除此之外:我发现您在ProductRequiredInputDto对象上没有ProductDtoID属性这一​​点很奇怪。

答案 1 :(得分:0)

是否必须调用检索ProductDto的函数?因为它对我来说听起来不合逻辑。我会创建一个控制器功能:

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

并在以下行中使用客户端查询:

var idPredicate =  breeze.Predicate.create('id', '==', yourSelectedProductDtoId);
var yourPredicate = breeze.Predicate.create('yourProductRequiredInputDtosProperty, 'yourOperator, 'yourValue');
var query = entityQuery.from('ProductRequiredInputDtos').where(idPredicate).and(yourPredicate);

Jonathan的方法也可行,但是你有一种专门的控制器功能用于一种类型的呼叫,并且那些很快就会堆积起来(除非你通过接收params使它们变得通用,但那是另一个故事)。这样,您可以从客户端对此模型进行任何查询,而不会使控制器混乱。