2012-11-26 81 views
2

如何通过几个参数使用Objectify 4正确过滤,考虑到其中一些参数可能会变空,这意味着我不想过滤掉这些参数? 例子: 请考虑我要过滤是这样的:物化过滤器空值

 releases = ofy().load().type(Release.class) 
       .filter("user.name", searchCriteria.getName()) 
       .filter("category", searchCriteria.getCategory()) 
       .filter("city", searchCriteria.getCity()).list(); 

为了配合我上面说的,我现在有下面的代码,检查每其中我的参数来空的,所以我不时间“T把它们放在过滤器在这种情况下:

if (!nameEmpty && !categoryEmpty && !cityEmpty) { 
     releases = ofy().load().type(Release.class) 
       .filter("user.name", searchCriteria.getName()) 
       .filter("category", searchCriteria.getCategory()) 
       .filter("city", searchCriteria.getCity()).list(); 
    } else if (!nameEmpty && !categoryEmpty) { 
     releases = ofy().load().type(Release.class) 
       .filter("user.name", searchCriteria.getName()) 
       .filter("category", searchCriteria.getCategory()).list(); 
    } else if (!nameEmpty && !cityEmpty) { 
     releases = ofy().load().type(Release.class) 
       .filter("user.name", searchCriteria.getName()) 
       .filter("city", searchCriteria.getCity()).list(); 
    } else if ... 

     ... 

如何避免过滤这种蹩脚的方式只有一个使用物化4线(或几个)做的?

回答

5
Query<Release> query = ofy().load().type(Release.class); 

if (!nameEmpty) 
    query = query.filter("user.name", searchCriteria.getName()); 

if (!categoryEmpty) 
    query = query.filter("category", searchCriteria.getCategory()) 

if (!cityEmpty) 
    query = query.filter("city", searchCriteria.getCity()); 

releases = query.list(); 
+0

完美,谢谢。会投票积极但我还不能...... – Joar