如何在Grails中使用findAll和;如果;用于在搜索前验证字段是否为空的语句

如何在Grails中使用findAll和;如果;用于在搜索前验证字段是否为空的语句,grails,gorm,grails-domain-class,Grails,Gorm,Grails Domain Class,我需要在Grails中创建一个findAll条件,但我有4个字段要搜索。如果某个特定变量不为null,我只需要按这些字段进行搜索 例如,如果所有变量都不是null,我将按如下所示的所有字段进行搜索: list = MyObject.findAll { 'in'("job", jobList) 'in'("businessUnit", businessUnitList) 'in'("company", companyList) eq("regularTime", p

我需要在Grails中创建一个
findAll
条件,但我有4个字段要搜索。如果某个特定变量不为null,我只需要按这些字段进行搜索

例如,如果所有变量都不是null,我将按如下所示的所有字段进行搜索:

list = MyObject.findAll {
    'in'("job", jobList)
    'in'("businessUnit", businessUnitList)
    'in'("company", companyList)
    eq("regularTime", params.regularTime)
}
我想做的是这样的:

regularTimeList = RegularTime.findAll {
    if(params.job != null)  'in'("job", jobList)
    if(params.businessUnit != null)  'in'("businessUnit", businessUnitList)
    if(params.company != null)  'in'("company", companyList)
    if(params.regularTime != null)  eq("regularTime", params.domainClassSearchFilters.regularTime)
 }
它不起作用,所以我想知道是否有办法做到这一点,因为现在我必须创建很多ifs来验证它们。。。我需要一个,如果每个场景。。。比如:


如果
作业
不为空且
公司
不为空,则一个findAll。如果
company
不为null且regularTime不为null,则另一个
findAll
可以执行以下操作:

regularTimeList = RegularTime.findAll {  
    if (params.job != null) params.job in jobList  
    if (params.businessUnit != null) params.businessUnit in businessUnitList  
    if (params.company != null) params.company in companyList  
    if (params.regularTime != null) regularTime == params.domainClass  
}

您可以这样做:

regularTimeList = RegularTime.findAll {  
    if (params.job != null) params.job in jobList  
    if (params.businessUnit != null) params.businessUnit in businessUnitList  
    if (params.company != null) params.company in companyList  
    if (params.regularTime != null) regularTime == params.domainClass  
}

我不知道发生了什么,但是上面的方法对我不起作用。。。 我用标准解决了它

list= MyObject.createCriteria().list {
                if(params.job != null && "" != params.domainClassSearchFilters.job )
                    'in'("job", jobList)
                if(params.businessUnit != null && "" != params.businessUnit)
                    'in'("businessUnit", businessUnitList)
                if(params.company != null && "" != params.company)
                    'in'("company", companyList)
                if(params.regularTime != null && "" != params.regularTime && params.regularTime.isDouble())
                    eq("regularTime", Double.parseDouble(params.regularTime))
            }

我不知道发生了什么,但是上面的方法对我不起作用。。。 我用标准解决了它

list= MyObject.createCriteria().list {
                if(params.job != null && "" != params.domainClassSearchFilters.job )
                    'in'("job", jobList)
                if(params.businessUnit != null && "" != params.businessUnit)
                    'in'("businessUnit", businessUnitList)
                if(params.company != null && "" != params.company)
                    'in'("company", companyList)
                if(params.regularTime != null && "" != params.regularTime && params.regularTime.isDouble())
                    eq("regularTime", Double.parseDouble(params.regularTime))
            }