我是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/