2013-04-16 3 views
5

Gibt es eine Möglichkeit, nach einem Feld in einer verwandten Tabelle mit greenDao zu sortieren? Z.B. Ich habe einen Tisch mit Autos und einen Fahrertisch. Jedes Auto hat einen Fahrer. Jetzt möchte ich nach Autos suchen (z. B. blau) und nach dem Namen des Treibers sortierengreundo Sortieren nach Feld in verwandter Tabelle

Antwort

4

In QueryBuilder gibt es Methoden zum Angeben der Sortierreihenfolge. Suchen Sie nach Methoden, die mit "order ..." beginnen, z. orderAsc (Eigenschaft)

+0

Oh, warte, wir tun nicht verbindet noch. ;) Ich schätze, Sie müssen jetzt eine benutzerdefinierte (rohe) Abfrage schreiben. –

+0

yea gerade noch einmal versucht, nachdem Sie antworteten und de.greenrobot.dao.DaoException bekommen: Eigenschaft 'foo' ist nicht Teil von bar Haben Sie ein Beispiel, wie man es mit einer rohen Abfrage tut? – ligi

+0

Bestellmethoden sind nicht auf einem QueryBuilder.Join scheint es –

4

Ich spiele im Moment auch mit GreenDao herum und hoffe mein kleiner Zusatz zu dem Kommentar in der ersten Antwort und die Beschreibung in der queries part of the greenDao documentation hilft.

Der folgende Ausschnitt sollte funktionieren (habe es nicht testen :)):

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

Dies erzeugt intern eine SQL similiar dazu:

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 

Der erste Teil der Anweisung erstellt wird Der Rest für Sie durch die Methode queryRawCreate ist die benutzerdefinierte SQL-Anweisung, die an queryRawCreate übergeben wurde.

Siehe this question, wenn Sie sich fragen, wo die JOIN-Anweisung ist.

0

Sie können QueryBuilders mit den Dao verwenden, die vom ORMA von green- dao generiert werden.

definieren, bevor Sie

ProductDao productDao; 
DaoSession daoSession; 

verwenden Sie sollten die DaoMaster und DaoSession in Ihrem Anwendungsbereich platzieren. Innerhalb der onCreate() der Klasse, die Application erweitert.

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

initialisieren, bevor Sie

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

verwenden können Sie die Ergebnisse wie diese Art der Tätigkeit angezeigt werden soll.

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