我确信有办法做到这一点,但我真的坚持这个。
我有一个以多对多关系连接到实体Foo
和Bar
的域模型。现在,当我想将所有Foos列入某个Bar时,我会进行查询并获得大量FooBar
个对象。我遍历这些对象并将所有Foo
添加到列表中。
像这样:
def fooBarRelations = FooBar.findAllByBar bar
def fooList = []
fooBarRelations.each { fooList.add it.foo }
如何根据fooList
添加到网址g:sortableColumn
(要排序的字段)和sort
的参数对order
进行排序。
我知道你可以直接将参数传递给查询,但我觉得这在我的情况下是不可能的?
那我怎么能
如果我能做到这一点......
def fooBarRelations = FooBar.findAllByBar bar, [sort: 'foo.' + params.sort, order: params.order]
......问题将得到解决。但将此传递给查询对输出没有任何影响。有什么办法可以按子属性对查询进行排序吗?
答案 0 :(得分:0)
如果你真的无法在查询本身内进行排序。然后你需要一个列表列表。
List<List<Fields>> mylist;// where List<Fields> is a lists of the fields.
然后使用比较器对List进行排序&gt;通过所需的提交。假设您想要的字段位于索引3:
new Compare(List<Fields> L1, List<Fields> L2){
if(L1.get(3)>L2.get(3))
return -1;//etc.
根据评论进行更新:
说你的实体如下
public class Entity{
String name, address, school;
Integer bankaccount;
//etc...
}
然后
public class WhereISort{
List<Entity> myList;
String mysorter;//mysorter can be declared here as static final
public WhereISort(){//maybe pass list in here or whatever
}
public Response myWebService(params..., String sorter){
mysorter=sorter;//mysorter can be declared here as static final
Collections.sort(myList, new Comparator() {
public int compare(Entity e1, Entity e2) {
if(mysorter.equalsIgnoreCase("name")){
return e1.getName().compareToIgnoreCase(e1.getName());
}else if(mysorter.equalsIgnoreCase("bankaccount")){
//your code here, etc.
}
}
});
}
}
当然,重点是使用“mysorter”和内部类“Comparator”来排序