考虑到它具有来自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();
我的问题是,还有另一种方法吗?我做的是正确的吗?是否可以有更简单或更直接的方式将这些子句放在一起?
答案 0 :(得分:0)
在不知道查询意图的情况下,不确定什么是正确的。据我所知,您列出的两个查询都是相同的。根据您提供的错误消息,您以前可能已经解决了一个错误(第一个where
缺少了equalTo
)。
此处的查询将查找Obj1
为state
的所有state
。然后,每个都加入objs2
,但只加入Obj2
为state
的{{1}}。返回的state
仅填充了Obj2
,id
和description
。
我建议使用您的两个示例中的后一个-将子查询提取到变量中。它使查询更易于修改,并且许多混合的点和级联运算符使代码难以理解。