使用take(),orderBy和inlineCount时出现Breezejs错误

时间:2013-07-26 19:13:02

标签: breeze

当我在一个查询上调用inlineCount(),该查询由相关属性进行排序并对查询执行取值时,inlineCount等于传递给take()的参数。例如,以下查询返回正确的inlineCount:

    testFunc = function () {
        EntityQuery.from('Residents')                    
                .take(10)                    
                .inlineCount()
                .using(manager).execute()
                .then(function (data) {
                    console.log(data.inlineCount, data);  //logs correct value                      
                });
    }

但是当我按如下方式向我的查询添加排序时:

testFuncOrdering = function () {
    EntityQuery.from('Residents')
            .orderBy('user.firstName')
            .take(10)
            .inlineCount()
            .using(manager).execute()
            .then(function (data) {
                console.log(data.inlineCount, data); //logs 10
            });
}

inlineCount为10,或者我传递的任何内容

这是我的控制器动作:

[HttpGet]
public IQueryable<UserDetail> Residents()
{
    return _context.Context.UserDetails
        .Where(x => _aptIds.Contains(x.User.UserDetail.ApartmentComplexId))
        .Where(x => x.Discriminator == UserDetail.Resident);
}     

这个错误看起来类似于1.4.0中修复的错误,但不是为inlineCount获取null / undefined,而是获取了取值。如有必要,我可以提供我的元数据。任何帮助表示赞赏,谢谢。

2 个答案:

答案 0 :(得分:3)

我已经确认了您的发现并在内部报告为缺陷#2493。这是我的复制品:

首先,我们知道inlineCount至少在某些时候与orderBytake一起使用。这是来自DocCode的测试:

var productQuery = EntityQuery.from("Products"
    .where("ProductName", "startsWith", "C");

var pagedQuery = productQuery
    .orderBy("ProductName")
    .skip(5)
    .take(5)
    .inlineCount();

JSON结果是:

{
  $id: "1",
  $type: "Breeze.WebApi.QueryResult, Breeze.WebApi",
  Results: [
    {...},
    {...},
    {...},
    {...},
  ],
  InlineCount: 9
}

四种产品共退回了9种名称以“C”开头的产品。是的,如果没有.skip(5),它仍然有用;它返回前5个产品,并再次报告共9个合格产品。

以下是该查询的生成网址:

http://localhost:47595/breeze/Northwind/Products?$filter=startswith(ProductName,'C') eq true&$orderby=ProductName&$top=5&$inlinecount=allpages

所以我们知道Breeze至少在某些时候做了正确的事情:)

你出了什么问题?

问题似乎是在相关实体属性上 orderBy (例如,您的“user.firstName”)。

返回DocCode,我修改了查询网址以获取OrderDetails,并按相关的Product.ProductNames排序。我没有为编写微风查询而烦恼。我只是将生成的URL输入浏览器地址栏。

以下是orderBy的网址:

http://localhost:47595/breeze/Northwind/OrderDetails?$orderby=Product/ProductName&$top=5&$inlinecount=allpages

结果inlineCount 5 ... take值和实际返回的记录数。

当我删除orderBy

http://localhost:47595/breeze/Northwind/OrderDetails?$top=5&$inlinecount=allpages

我们再次获得5个OrderDetails,但结果inlineCount 2155 !!!

休斯顿,我们遇到了问题。

答案 1 :(得分:1)

现在可以在Breeze v 1.4.1中修复此问题。