2013-04-16 40 views
5

có cách nào để sắp xếp theo trường trong bảng có liên quan với greenDao không? Ví dụ. Tôi có một bảng ô tô và một bảng điều khiển. Mỗi chiếc xe đều có tài xế. Bây giờ tôi muốn truy vấn (ví dụ: ô tô màu xanh lam) và sắp xếp theo tên của người lái xegreendao sắp xếp theo trường trong bảng có liên quan

Trả lời

4

Trong QueryBuilder, có các phương pháp để chỉ định thứ tự sắp xếp. Tìm các phương pháp bắt đầu bằng "thứ tự ...", ví dụ: orderAsc (Thuộc tính).

+0

Rất tiếc, chúng tôi chưa tham gia. ;) Đoán bạn phải viết một số truy vấn (nguyên) tùy chỉnh cho bây giờ. –

+0

yea chỉ cần thử lại sau khi bạn trả lời và nhận de.greenrobot.dao.DaoException: Thuộc tính 'foo' không phải là một phần của thanh Bạn có ví dụ về cách thực hiện với truy vấn thô không? – ligi

+0

phương thức đặt hàng không khả dụng trên querybuilder.join có vẻ như –

4

Tôi cũng đang chơi với GreenDao và hy vọng phần bổ sung nhỏ của tôi vào nhận xét trong câu trả lời đầu tiên và mô tả trong số queries part of the greenDao documentation sẽ giúp.

Đoạn sau đây nên làm việc (không kiểm tra nó :)):

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

Điều này tạo ra trong nội bộ một tương tự SQL sau:

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 

Phần đầu của báo cáo kết quả được tạo ra cho bạn bằng phương thức queryRawCreate, phần còn lại là câu lệnh sql tùy chỉnh đã được chuyển đến queryRawCreate.

Xem this question nếu bạn tự hỏi câu lệnh JOIN ở đâu.

0

Bạn có thể sử dụng QueryBuilders với Dao được tạo bởi greendao ORM.

Xác định trước khi sử dụng

ProductDao productDao; 
DaoSession daoSession; 

Bạn nên đặt DaoMaster và DaoSession trong phạm vi ứng dụng của bạn. Bên trong onCreate() của lớp mở rộng ứng dụng.

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

Initialize trước khi sử dụng

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

Bạn có thể sắp xếp các kết quả như thế này để hiển thị trong hoạt động này.

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; 
     } 
    } 
Các vấn đề liên quan