2014-11-08 24 views
6

Trong trơn chúng ta có thể sử dụngLàm thế nào để làm "OR" bộ lọc trong trơn

query.filter(m => (m.state === state1 && m.status === status1) || (m.state === state2 && m.status == status2)) 

cho một "OR" điều kiện trong mệnh đề where. Tuy nhiên, yêu cầu của tôi là tôi có điều kiện "HOẶC" trong danh sách (được người dùng thông qua như một phần của URL). Danh sách điều kiện bao gồm bộ dữ liệu trạng thái và trạng thái như

List[(state1, status1),(state2, status2),(state3, status3)] 

Vì vậy, điều tôi muốn là có thể xây dựng || tuyên bố bên trong bộ lọc để tôi có thể sử dụng từng điều kiện trong danh sách để tạo truy vấn nhưng tôi không chắc chắn cách đạt được điều đó. Hoặc nếu có điều gì đó giống như

query.applyOrFilters.orFilter(condition1).orFilter(condition2) 

thực tế sẽ làm điều kiện1 HOẶC điều kiện 2 trên đối tượng truy vấn. Có thể sử dụng Slick hoặc để hiểu về tính năng này không?

+0

Nếu bạn cần một cái gì đó thêm composable, dựa trên vị ngữ, liên kết và disjunctions (một chút như Hibernate/JPA Criteria API), bạn có thể kiểm tra câu trả lời của tôi trong http://stackoverflow.com/questions/28281232/slick-create- truy vấn-liên kết-disjunctions-dynamic/28303670 # 28303670 –

Trả lời

10

Trong khi chơi đùa với nó, tôi cuối cùng đã tìm thấy một cách để làm điều đó: -

query.filter { 
    m => conditions.map(n => m._13 === n._1 && m._14 === n._2).reduceLeft(_ || _) 
} 

nơi conditions có dạng List[(String,String)], m._13 bản đồ để nhà nước và m._14 bản đồ để trạng thái.

Hy vọng điều này sẽ giúp ai đó thử cùng một điều.

Các vấn đề liên quan