当我在一个查询上调用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,而是获取了取值。如有必要,我可以提供我的元数据。任何帮助表示赞赏,谢谢。
答案 0 :(得分:3)
我已经确认了您的发现并在内部报告为缺陷#2493。这是我的复制品:
首先,我们知道inlineCount
至少在某些时候与orderBy
和take
一起使用。这是来自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中修复此问题。