2013-04-16 58 views
5

有沒有一種方法可以通過與greenDao相關表中的字段進行排序?例如。我有一張汽車桌和一張司機桌。每輛車都有一名司機。現在我想查詢(例如藍色)汽車並按驅動程序的名稱排序greendao根據相關表格中的字段排序

回答

4

在QueryBuilder中,有一些方法可以指定排序順序。尋找以「order ...」開頭的方法,例如orderAsc(物業)。

+0

哦,等等,我們不會加入。 ;)猜猜你現在必須寫一些自定義(原始)查詢。 –

+0

是啊剛試過後,你回答並得到了de.greenrobot.dao.DaoException:財產'foo'不是酒吧的一部分 你有一個例子,如何用原始查詢做到這一點? – ligi

+0

訂單方法在querybuilder.join上不可用 –

4

我現在也玩GreenDao,希望我在第一個回答和queries part of the greenDao documentation中的說明有所幫助。

下面的代碼片斷應該工作(沒有測試:)):

Query query = carsDao.queryRawCreate( ", driver D WHERE T.COLOR='blue' AND T.DRIVER_ID=D._ID ORDER BY D.NAME ASC"); 

這將創建一個內部SQL類同此:

SELECT T.'id', T.'name', T.'color', T.'driver_id' 
FROM cars T, driver D 
WHERE T.COLOR='blue' 
AND T.DRIVER_ID=D._ID 
ORDER BY D.NAME ASC 

聲明的第一部分是創建對於你的queryRawCreate方法,剩下的就是傳遞給queryRawCreate的自定義sql語句。如果您想知道JOIN語句的位置,請參閱this question

0

您可以將QueryBuilders與由greendao ORM生成的Dao's一起使用。

定義使用

ProductDao productDao; 
DaoSession daoSession; 

之前,您應該把您的應用範圍的DaoMaster和DaoSession。在擴展Application的類的onCreate()內部。

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getApplicationContext(), "app-db", null); 
SQLiteDatabase db = helper.getWritableDatabase(); 
daoSession = new DaoMaster(db).newSession(); 

初始化您使用

daoSession = ((MyApplication) getApplication()).getDaoSession(); 
productDao = daoSession.getProductDao(); 

之前,您可以將結果像這種在活動中顯示。

private void refreshProducts() { 
     switch (sorted_by){ 
      case SORT_BY_DATE: 
       cardItems = productDao.queryBuilder().orderAsc(ProductDao.Properties.Id).list(); 
       setupRecyclerView(); 
       break; 

      case SORT_BY_PRICE: 
       cardItems = productDao.queryBuilder().orderDesc(ProductDao.Properties.Price).list(); 
       setupRecyclerView(); 
       break; 

      case SORT_BY_POPULARITY: 
       cardItems = productDao.queryBuilder().orderDesc(ProductDao.Properties.Name).list(); 
       setupRecyclerView(); 
       break; 
     } 
    }