Breeze Query: сравнить два столбца на Связанном объекте - PullRequest
0 голосов
/ 19 октября 2018

Используя Breeze, как я могу сравнить два столбца в связанном свойстве объекта?

 public class TableA{
   public ICollection<TableB> TableBEntity {get; set;}
}

public class TableB{
  public TableC TableCEntity {get; set;}
}

public class TableC {
  public string columnA { get; set;}
  public string columnB { get; set;}
}

var subpredicate = Predicate.create('TableCEntity.columnA', FilterQueryOp.Equals, 'TableCEntity.columnB');

var predicate = Predicate.create('TableBEntity', FilterQueryOp.Any, subpredicate);

var query1 = EntityQuery.from('TableB')
           .where(subpredicate);

var query2 = EntityQuery.from('TableA')
             .where(predicate );

query1 выше выполняется без ошибок.Однако query2 выдает мне ошибку:

Запрос, указанный в URI, недопустим.Не удалось найти свойство с именем «TableCEntity» для типа «TableA».

Похоже, что подпредикат не был правильно оценен, и он ищет свойство TableCEntity в TableA вместо on TableB.Если я изменю субпредикат на

var subpredicate = Predicate.create('TableCEntity.columnA', FilterQueryOp.Equals, 'asamplevalue');

, тогда query2 works find.Это просто не работает, правая часть предиката - это столбец записи.

Я делаю что-то не так или это ошибка?

1 Ответ

0 голосов
/ 05 февраля 2019

Операторы breeze 'any' и 'all' требуют, чтобы свойство, возвращаемое первым выражением ("orders" в приведенном ниже примере), было нескалярным свойством навигации.т.е. свойство навигации, которое возвращает коллекцию.Субпредикат тогда является просто предикатом типа, возвращаемого первым выражением.

var query = EntityQuery.from("Employees")
    .where("orders", "any", "freight", ">", 950);

с предикатами это будет выражаться следующим образом

var p2 = Predicate.create("freight", ">", 950);
var p1 = Predicate.create("orders", "any", p2);
var query = EntityQuery.from("Employees").where(p1);

В вашем случае я не уверен, что вы пытаетесь сделать с вашим запросом2.«query2» выглядит как запрос к совокупности сущностей «TableB», возвращаемых из «TableA», но «subpredicate» имеет дело с сущностями «TableC».

Если это не поможет, может быть проще помочь, если бы вы могли переименовать имена таблиц A, B и C в более интуитивно понятные имена таблиц и использовать множественные имена свойств коллекции.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...