我是grails的新手,但之前有过使用.net和c#以及linq查询数据库的经验。
我正在尝试使用多选项下拉框按可选项筛选对象列表。因此,对于控制器,我将获得一些参数列表,其中一些参数将为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
我试过看看不同的论坛,没有运气。我几乎在我的智慧结束。如果任何一个时髦的大师可以为我揭示一些事情,我会非常感激。
谢谢
答案 0 :(得分:2)
看起来你的问题可能是
[params.locationSelect.each{ it != null }]
each
用于迭代,结果表达式只是迭代的列表。此外,方括号将该列表嵌套在另一个列表中。你可能想要
'in'('location', params.locationSelect.findAll { it != null })
在这种特殊情况下,您也可以使用身份闭包,因为"groovy truth"对象与测试null相同:
'in'('location', params.locationSelect.findAll())