grails - 闭包中的变量以避免多个 if

标签 grails closures grails-orm

对于以下代码块,我需要一个更好的解决方案,更好地满足 DRY 原则。有没有办法将每个闭包中的运算符 <,...,>= 作为变量处理?

def query
    if (wvOp == ' ')
        query = Notiz.where {
        notiztext =~ "${params['notiztext']}" &&
        referenz =~ "${params['referenz']}" 
    }
    if (wvOp == '<')
        query = Notiz.where {
        notiztext =~ "${params['notiztext']}" && 
        referenz =~ "${params['referenz']}" &&
        anlagetermin < wiedervorlage
    }
    if (wvOp == '<=')
        query = Notiz.where {
        notiztext =~ "${params['notiztext']}" &&
        referenz =~ "${params['referenz']}" &&
        anlagetermin <= wiedervorlage
    }
    if (wvOp == '=')
        query = Notiz.where {
        notiztext =~ "${params['notiztext']}" &&
        referenz =~ "${params['referenz']}" &&
        anlagetermin == wiedervorlage
    }
    if (wvOp == '>')
        query = Notiz.where {
        notiztext =~ "${params['notiztext']}" &&
        referenz =~ "${params['referenz']}" &&
        anlagetermin > wiedervorlage
    }
    if (wvOp == '>=')
        query = Notiz.where {
        notiztext =~ "${params['notiztext']}" &&
        referenz =~ "${params['referenz']}" &&
        anlagetermin >= wiedervorlage
    }
    query.findAll()

彼得
德国多特蒙德

最佳答案

一种方法是替换您的 where使用基于标准的查询。沿着这些思路:

// translate incoming comparison operator to equivalent criteria method
def opMap = [ '<': 'lt', '<=': 'lte', '=': 'eq', '>': 'gt', '>=': 'gte' ]

def c = Notiz.createCriteria()
def results = c.list {
    and {
        ilike(notiztext, params['notiztext'])
        ilike(referenz, params['referenz'])
        if (wvOp in opMap.keySet()) {
           "${opMap[wvOp]}"(anlagetermin, wiedervorlage)
        }
    }
}

关于grails - 闭包中的变量以避免多个 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165041/

相关文章:

Grails 查询不在列表中

postgresql - 如何在 heroku 中运行 grails 命令?

javascript - Node js 中的关闭未按预期工作

Swift 闭包类型转换

javascript - promises 和 closures 是否消耗了我所有的内存?

Grails getter 写入数据库?

grails - 如何在 Grails 3.0 中检测复合主键?

ajax - 使用 AJAX 和 JSON 更新 grails 模板

grails - 如何自动注销选择删除其帐户的登录用户?

grails - 为什么我们在 g :select optionvalue 中使用闭包