0

我正在尝试使用颤振的moor包对我的数据库实现多值过滤器。

moor已经有where接受表达式并将其转换为 sql 语句的方法。喜欢:

 (select(exercisesTable)..where((e) => (e.name.equals(name)))).get(); 

但是由于多个值,我需要过滤数据。在我搜索文档后,我发现了两种可能的解决方案:

  1. 使用CutomExpressionClass 链接

    Expression expression = CustomExpression<bool, BoolType>(" water BETWEEN 4.0 AND 5.0 AND protein BETWEEN 4.0 AND 15.0 AND description LIKE CHESS%");
    

    但我得到这个错误:*

    SqliteException: near ";": 语法错误,SQL逻辑错误

*

  1. 使用Custom select statements 链接
    我没有尝试过,因为我相信问题出在 sql 本身而不是 moor 包。
4

2 回答 2

1

SingleTableQueryMixin::where方法(链接)的评论:

...      
/// If a where condition has already been set before, the resulting filter
/// will be the conjunction of both calls.
...

根据这个你可以使用类似的东西:

 Future<List<TableData>> getTableList({int position, int type}) {
     final _select = select(table);
     if (position != null) {
        _select..where((tbl) => tbl.position.equals(position));
     }
     if (type != null) {
        _select..where((tbl) => tbl.type.equals(type));
     }
     return _select.get();
 }
于 2020-08-27T07:13:17.570 回答
0

您可以使用布尔代数功能来拥有多个 where 条件。

// find all animals that aren't mammals and have 4 legs
select(animals)..where((a) => a.isMammal.not() & a.amountOfLegs.equals(4));

// find all animals that are mammals or have 2 legs
select(animals)..where((a) => a.isMammal | a.amountOfLegs.equals(2));
于 2021-12-03T23:41:24.470 回答