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
In QueryBuilder gibt es Methoden zum Angeben der Sortierreihenfolge. Suchen Sie nach Methoden, die mit "order ..." beginnen, z. orderAsc (Eigenschaft)
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.
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;
}
}
Oh, warte, wir tun nicht verbindet noch. ;) Ich schätze, Sie müssen jetzt eine benutzerdefinierte (rohe) Abfrage schreiben. –
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
Bestellmethoden sind nicht auf einem QueryBuilder.Join scheint es –