2010-12-27 33 views
49

Hi Có cách nào thanh lịch kết hợp 'thích' và 'hoặc' khi tôi đang sử dụng API truy vấn không? cho 'như' có cái gì đó như:truy vấn và (x như 'a' hoặc y như 'a')

query.WhereRestrictionOn(x=>x.Code).IsLike(codePart) 

cho 'hoặc' tôi có thể làm một cái gì đó như:

query.Where(x=>x.Code == codePart || x.Description== codePart) 

nhưng làm thế nào tôi có thể tạo ra một truy vấn như thế này:

select * from n nơi mã như '% abc%' hoặc mô tả như '% abc%'

Trả lời

56
query.Where(Restrictions.On<Type>(x => x.Code).IsLike(codePart) || 
      Restrictions.On<Type>(x => x.Description).IsLike(codePart)) 
+0

Cảm ơn cho truy vấn –

59

Bạn có thể sử dụng NHibernate phân ly lớp để làm điều này trong một thanh lịch hơn (IMHO) thời trang:

var disjunction= new Disjunction(); 

disjunction.Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart)); 
disjunction.Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart)); 
//(and so on) 

và sau đó:

query.Where(disjunction) 

Mỗi "OR" là một riêng biệt hướng dẫn, giúp nếu bạn muốn thêm các vị từ có điều kiện.

+0

làm việc câu trả lời này đã giúp tôi ồ ạt - cảm ơn bạn – Haroon

+0

câu trả lời mát mẻ, nhờ –

9

Một phiên bản của này, mà tùy thuộc vào khẩu vị, bạn có thể thích, là như sau:

query.Where(Restrictions.Disjunction() 
     .Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart)) 
     .Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart))); 
Các vấn đề liên quan