我有这样的工作代码:
def criteria = Instance.createCriteria()
def list = criteria.listDistinct {
eq("saved", true)
eq("client", client)
and {
basicValues {
eq("fieldA", object.valueA())
/** CODE BLOCK **/
}
customValues {
eq("fieldB", object.valueB())
/** CODE BLOCK **/
}
}
or {
basicValues {
eq("fieldC", object.valueC())
/** CODE BLOCK **/
}
customValues {
eq("fieldD", object.valueD())
/** CODE BLOCK **/
}
}
}
如您所见,我正在使用 AND
和 OR
部分创建一些条件。它们都加入了另一个条件(basicValues/customValues 与 Instance 是 1:n 关系)。/** 代码块 **/部分是一组始终相同的条件。
到目前为止,我在每个 /** CODE BLOCK **/
地方放置了相同的条件(例如 lt("field", 10)
等...) .
我可以将这个 /** CODE BLOCK **/
放入函数中吗?因此,这些条件将集中在一个地方,并且代码将更具可读性???
最佳答案
如果您将 /** CODE BLOCK**/
放入单独的闭包中,则可以在您的条件中包含对它的调用。
def commonCriteria = {
/** CODE BLOCK **/
}
def criteria = Instance.createCriteria()
def list = criteria.listDistinct {
commonCriteria.delegate = delegate
eq("saved", true)
eq("client", client)
and {
basicValues {
eq("fieldA", object.valueA())
commonCriteria()
}
customValues {
eq("fieldB", object.valueB())
commonCriteria()
}
}
...
}
关于sql - GORM - 动态查询 - 分离标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875385/