是否可以修改为具有WHERE子句的连接对象返回的属性?

时间:2019-04-20 01:38:28

标签: aqueduct

考虑到它具有来自WHERE子句的过滤器,我一直在尝试更改连接对象的返回属性。但是,这不可能直接实现,因为WHERE子句返回QueryExpression类,而不是具有returningProperties方法的Query类。

我根据以下代码尝试过:

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 :(得分:0)

在不知道查询意图的情况下,不确定什么是正确的。据我所知,您列出的两个查询都是相同的。根据您提供的错误消息,您以前可能已经解决了一个错误(第一个where缺少了equalTo)。

此处的查询将查找Obj1state的所有state。然后,每个都加入objs2,但只加入Obj2state的{​​{1}}。返回的state仅填充了Obj2iddescription

我建议使用您的两个示例中的后一个-将子查询提取到变量中。它使查询更易于修改,并且许多混合的点和级联运算符使代码难以理解。