【问题标题】:grails - using dynamic list in a querygrails - 在查询中使用动态列表
【发布时间】:2012-06-26 16:34:07
【问题描述】:

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

我正在尝试使用多选下拉框按可选项目过滤对象列表。所以对于控制器,我将得到一个参数列表,其中一些参数为空。所以我想要类似于
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  

我试过查看不同的论坛,但没有任何运气。我几乎无计可施。如果任何 groovy 大师可以为我阐明一些事情,我将不胜感激。

谢谢

【问题讨论】:

    标签: grails groovy grails-orm


    【解决方案1】:

    看起来你的问题可能是

    [params.locationSelect.each{ it != null }]
    

    each 用于迭代,结果表达式只是被迭代的列表。此外,方括号将该列表嵌套在另一个列表中。你可能想要

    'in'('location', params.locationSelect.findAll { it != null })
    

    在这种特殊情况下,您也可以只使用标识闭包,因为 "groovy truth" 对象与测试 null 相同:

    'in'('location', params.locationSelect.findAll())
    

    【讨论】:

    • 非常感谢。并感谢有用的解释。这确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多