1

私は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  

運が悪かったので、さまざまなフォーラムを調べてみました。私はほとんど機知に富んでいます。グルーヴィーなマスターが私のために物事に光を当てることができれば、私はそれを大いに感謝します。

ありがとう

4

1 に答える 1

2

あなたの問題は

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

eachは反復に使用され、結果の式は反復されるリストにすぎません。また、角かっこはそのリストを別のリストにネストします。あなたはおそらくしたい

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

この特定のケースでは、オブジェクトの「Groovy Truth」はnullのテストと同じであるため、IDクロージャーを使用することもできます。

'in'('location', params.locationSelect.findAll())
于 2012-06-26T16:44:34.863 に答える