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

Is it possible to modify the properties that are returned for the joined objects that have WHERE clause?

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

我按照下面的代码试了一下:

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();

我的问题是,还有其他方法吗?我做了什么是正确的?有没有可能有更简单或更直接的方式将这些条款放在一起?

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

您在此处的查询查找 statestate 的所有 Obj1。然后它加入每个 objs2,但只有 statestateObj2。返回的 Obj2 仅填充了 iddescriptionanswer

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