2013-04-16 10 views
5

c'è un modo per ordinare da un campo in una tabella correlata con greenDao? Per esempio. Ho un tavolo di macchine e un tavolo di autisti. Ogni macchina ha un autista. Ora desidero richiedere le auto (ad esempio blu) e ordinare per nome del drivergreendao ordina per campo nella tabella correlata

risposta

4

In QueryBuilder, esistono metodi per specificare l'ordine di ordinamento. Cerca i metodi che iniziano con "ordine ...", ad es. orderAsc (Proprietà).

+0

Oh, aspetta, non ci uniamo ancora. ;) Suppongo tu debba scrivere qualche query personalizzata (grezza) per ora. –

+0

si è appena riprovato dopo aver risposto e ottenuto de.greenrobot.dao.DaoException: la proprietà 'foo' non fa parte della barra Hai un esempio su come farlo con una query non elaborata? I metodi di ordine – ligi

+0

non sono disponibili su un querybuilder. –

4

Io gioco in giro con GreenDao anche in questo momento e spero che la mia piccola aggiunta al commento nella prima risposta e la descrizione nel queries part of the greenDao documentation aiuti.

Il seguente frammento dovrebbe funzionare (non provarla :)):

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

Questo crea internamente un simile SQL per questo:

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 

viene creata la prima parte della dichiarazione per te con il metodo queryRawCreate, il resto è l'istruzione sql personalizzata che è stata passata a queryRawCreate.

Vedere this question se ci si chiede dove si trova l'istruzione JOIN.

0

È possibile utilizzare i QueryBuilder con i Dao creati dall'ORM greendao.

Definire prima di utilizzare

ProductDao productDao; 
DaoSession daoSession; 

Si consiglia di posizionare la DaoMaster e DaoSession nel vostro campo di applicazione. All'interno di onCreate() della classe che estende Application.

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

inizializzazione prima di utilizzare

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

È possibile ordinare i risultati come questo per visualizzare l'attività.

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; 
     } 
    }