2014-07-18 1 views
6

J'utilise Nhibernate. J'écris la requête par la méthode de queryover. Je suis capable d'écrire et de clause comme dans le code ci-dessous. Cela fonctionne bien.Utiliser la clause OU dans l'interrogation dans NHibernate

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

Mais je veux utiliser la clause Or au lieu de And, ou une combinaison des deux. Comment puis-je l'implémenter? Merci

Répondre

17

Voici la description que nous pouvons construire ou avec NHiberante

La syntaxe (en C# comme dit l'étiquette) est:

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

Dans ce cas, il pourrait être comme ça (encore une fois en C#, tandis que la question semble utiliser VB):

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

devrait-il pas être Restrictions.Where au lieu de Restrictions.On? – Rashack

+0

@Rashack, merci, vous avez raison, 'Restrictions.Where' au lieu de' Restrictions.On' –

Questions connexes