2014-07-18 10 views
6

Ich verwende Nhibernate. Ich schreibe Abfrage durch Abfrage-Methode. Ich bin in der Lage zu schreiben und Klausel wie in Code unten. Es funktioniert gut.Verwenden Sie OR-Klausel in queryover in NHibernate

db.QueryOver(Of Users)() 
    .Where(Function(x) x.Role = "Guest") 
    .And(Function(x) x.Block = 0) 
    .And(Function(x) x.APPID = appId) 
    .List(); 

Aber ich will Or Klausel verwenden, anstatt And oder eine Kombination aus beidem. Wie kann ich das umsetzen? Dank

Antwort

17

Hier ist die Beschreibung, wie wir OR mit NHiberante

Die Syntax (in C# als der Tag sagt) bauen kann ist:

  • Restrictions.Or(restriction1, restriction1)
  • Restrictions.Disjunction().Add(restriction1).Add(restriction2).Add(...

In diesem Fall könnte es so (wieder in C#, während Frage VB zu verwenden scheint) sein:

db.QueryOver<Users>()() 
    .Where((x) => x.Role == "Guest") 
    .And(Restrictions.Or(
     Restrictions.Where<Users>((x) => x.Block == 0) 
    , Restrictions.Where<Users>((x) => x.APPID == appId) 
)) 
    .List<Users>(); 
+2

Sollte es nicht Restrictions.Where statt Restrictions.On sein? – Rashack

+0

@Rashack, danke, du hast recht, 'Restrictions.Where' statt' Restrictions.On' –