2013-04-16 16 views
5

はgreenDaoと、関連テーブルのフィールドでソートする方法はありますか?例えば。私は車のテーブルとドライバーのテーブルを持っています。各車には運転手がいます。今、私はQueryBuilderでドライバgreendaoソート

答えて

4

の名前で(例えば青)車やソートを照会したい、ソート順を指定する方法があります。 "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文です。結合文がどこにあるだろう場合

this questionを参照してください。

0

あなたは、ダオのgreendaoのORMによって生成されたものとQueryBuildersを使用することができます。あなたがあなたの適用範囲内DaoMasterとDaoSessionを置くべき

ProductDao productDao; 
DaoSession daoSession; 

を使用する前に

を定義します。アプリケーションを拡張するクラスの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; 
     } 
    }