grails - grails-在查询中使用动态列表

标签 grails groovy gorm

我是grails的新手,但以前有使用.net和C#和linq来查询数据库的经验。

我正在尝试使用多选下拉框按可选项目过滤对象列表。因此,对于 Controller ,我将获得参数列表,其中一些参数将为null。所以我想要一些类似于DailyProduction.Where(x => loaction.contains(x.location)).Select().ToList()

但是,使用Groovy和Grails看起来并不那么简单。

这是我尝试过的:

def filteredList = DailyProductionReport.createCriteria()
    def results = filteredList.list {

        if(params.locationSelect != null)
            'in'("location", [params.locationSelect.each{ it != null}])

    }

但是我得到一个运行时异常,上面写着:
 Class:
java.lang.ClassCastException
Message:
[Ljava.lang.String; cannot be cast to java.lang.String  

我试过没有运气的情况下浏览不同的论坛。我快要疯了。如果有经验丰富的大师可以为我提供一些启发,我将不胜感激。

谢谢

最佳答案

看来您的问题可能是

[params.locationSelect.each{ it != null }]
each用于迭代,结果表达式只是要迭代的列表。同样,方括号将列表嵌套在另一个列表中。你可能想要
'in'('location', params.locationSelect.findAll { it != null })

在这种特殊情况下,由于对象的"groovy truth"与测试null相同,因此您也可以仅使用身份闭包:
'in'('location', params.locationSelect.findAll())

关于grails - grails-在查询中使用动态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11211927/

相关文章:

grails - 没有将域对象添加到另一个域而没有域之间的关联

list - 带有无法在GORM/Grails中使用的枚举列表的持久域模型

groovy 初学者 - 如何在 groovy shell 中从内存中删除变量

groovy - 像Groovy的<<和>>运算符一样如何在Kotlin中进行合成

hibernate - Grails单向多对一和标准

grails - Grails在其他数据源中创建域对象

grails - grails many_to_many自定义映射表

unit-testing - Grails单元测试无效性

grails - IOS的foursquare oauth2

rest - 连续轮询作为后台服务