Можно ли изменить свойства, которые возвращаются для объединенных объектов, имеющих предложение WHERE? - PullRequest
1 голос
/ 20 апреля 2019

Я пытался изменить возвращенные свойства объединенного объекта, учитывая, что у него есть фильтр из предложения WHERE.Однако это было невозможно напрямую, потому что предложение WHERE возвращает класс QueryExpression, а не класс Query с методом returningProperties.

Я пытался в соответствии с приведенным ниже кодом:

var query = Query<Obj1>(context)
    ..where((o) => o.state).equalTo(state);
    query.join(set: (q) => q.objs2)
    ..where((a) => a.state).equalTo(state)
    ..returningProperties((a) => [a.id, a.description, a.answer]);
  var results = await query.fetch();

Я былв состоянии выполнить запрос, выполнив следующие действия:

var query = Query<Obj1>(context)
    ..where((o) => o.state).equalTo(state);
    Query<Obj2> subQuery = query.join(set: (q) => q.objs2)
    ..where((a) => a.state).equalTo(state)
    ..returningProperties((a) => [a.id, a.description, a.answer]);
  var results = await query.fetch();

У меня вопрос, есть ли другой способ сделать это?Что я сделал правильно?Можно ли иметь более простой или более прямой способ объединения этих предложений?

1 Ответ

0 голосов
/ 21 апреля 2019

Не уверен, что правильно, не зная цели запроса. Насколько я могу судить, оба перечисленных вами запроса идентичны; Судя по предоставленному вами сообщению об ошибке, вы могли ранее исправить ошибку (первая where отсутствовала equalTo).

Ваш запрос находит все Obj1 s, чей state равен state. Затем он присоединяется к objs2 для каждого, но только к Obj2, чей state равен state. Возвращенные Obj2 имеют только заполненные id, description и answer.

Я бы предложил использовать последний из двух ваших примеров - где вы извлекаете подзапрос в переменную. Это облегчает изменение запроса, а большое количество смешанных точечных и каскадных операторов затрудняет понимание кода.

...