2009-07-18 11 views
1

J'ai cette simple requête:requête simple avec "OU" clause (API Criteria)

ICriteria crit = session.CreateCriteria(typeof(Article)); 

crit.CreateCriteria("Category", global::NHibernate.SqlCommand.JoinType.InnerJoin) 
     .Add(Restrictions.Eq("Name", "Fun")); 

C'est de retour tous les articles dans la catégorie "Fun". Ma question est, comment puis-je ajouter une simple clause OR pour retourner aussi n'importe quel article avec "Title" = "New Joke" même si ce n'est pas dans la catégorie "fun"?

Semble je ne peux pas obtenir ce travail ...

Edit: Je sais que je dois swith à LeftOuterJoin, la question est sur la syntaxe correcte pour construire cette requête.

Edit2: Pour le rendre plus clair, la requête SQL que je suis en train de construire serait:

SELECT article.* 
FROM article LEFT OUTER JOIN category ON (article.category = category.id) 
WHERE category.name = 'fun' OR article.title = 'new joke' 

Répondre

1

Vous devez utiliser un critère Ou comme ceci:

crit.Add(Expression.Or(
    Expression.Eq("Category.Name", "Fun"), 
    Expression.Eq("Title", "New Joke") 
    )); 
+0

Ne fonctionne pas: "n'a pas pu résoudre la propriété: Cate gory.Name " – Drevak

+0

A travaillé en utilisant createAlias ​​à la place, merci! – Drevak

1

Vous pouvez simplement utiliser l'opérateur C# OR normal:

Restrictions.Eq("Category.Name", "Fun") || Restrictions.Eq("Title", "New Joke")