2010-12-27 6 views
49

Witam Czy istnieje jakiś elegancki sposób łączenia "jak" i "lub", gdy korzystam z interfejsu API zapytania? dla 'jak' coś jest nie tak:queryover i (x jak "a" lub y jak "a")

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

za 'lub' mogę zrobić coś takiego:

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

ale w jaki sposób można utworzyć kwerendę tak:

wybierz * od n, gdzie kod taki jak "% abc%" lub opis taki jak "% abc%"

Odpowiedz

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

Dziękujemy za zapytanie –

59

można użyć NHibernate alternatywy klasę to zrobić w bardziej elegancki (IMHO) Moda:

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) 

, a następnie:

query.Where(disjunction) 

Każdy "LUB" jest oddzielnym instrukcja, która pomaga, jeśli chcesz dodać predykaty warunkowo.

+0

praca ta odpowiedź pomogła mi masowo - dziękuję – Haroon

+0

chłodną odpowiedź, dzięki –

9

Inna wersja tego, co w zależności od gustu, może chcesz się następująco:

query.Where(Restrictions.Disjunction() 
     .Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart)) 
     .Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart))); 
Powiązane problemy