2013-07-26 3 views
1

Когда я вызываю inlineCount() в запросе, который оба заказа связанным свойством и выполняет взятие запроса, inlineCount равен аргументу, переданному для принятия() , Например, следующий запрос возвращает правильный inlineCount:Ошибка Breezejs с take(), orderBy и 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, но вместо того, чтобы получить значение null/undefined для inlineCount, я получаю значение take. При необходимости я могу предоставить свои метаданные. Любая помощь приветствуется, спасибо.

ответ

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 квалифицируемых продуктов.

Вот сгенерированный URL для этого запроса:

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

Итак, мы знаем Breeze делает правильно, по крайней мере, часть времени :)

Что идет не так для вас?

кажется, что проблема с orderBy на родственной собственности объекта (например, ваш «user.firstName»).

Возвращаясь к DocCode, я переработал URL-адрес запроса, чтобы получить OrderDetails, отсортированный по их связанным Product.ProductNames. Я не беспокоился о составлении запроса бриза. Я просто ввел сгенерированный URL-адрес в адресную строку браузера.

Вот URL с OrderBy:

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

Полученный inlineCount является ... значение take и количество записей фактически возвращенных.

И когда я удаляю orderBy:

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

Опять мы получаем 5 ORDERDETAILS но в результате inlineCount является !!!

Хьюстон, у нас есть проблема.

1

Это исправлено в Breeze v 1.4.1, доступном сейчас.

Смежные вопросы