1

考虑到它具有来自 WHERE 子句的过滤器,我一直在尝试更改连接对象的返回属性。然而,这是不可能的,因为 WHERE 子句返回一个 QueryExpression 类,而不是具有返回属性方法的 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();

我的问题是,还有其他方法可以做到这一点吗?我所做的是正确的吗?是否有可能有一种更简单或更直接的方式将这些条款放在一起?

4

1 回答 1

0

在不知道查询意图的情况下不确定什么是正确的。据我所知,您列出的两个查询都是相同的;根据您提供的错误消息,您之前可能有一个错误已修复(第一个错误where丢失equalTo)。

您在此处的查询会找到所有为 的Obj1s 。然后它加入for each,但只有who is 。返回的只有他们的,和填充。statestateobjs2Obj2statestateObj2iddescriptionanswer

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

于 2019-04-20T21:41:28.567 回答