带“OR”子句的简单查询(Criteria API)

时间:2009-07-18 17:49:00

标签: nhibernate

我有这个简单的查询:

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

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

这将返回“Fun”类别中的所有文章。我的问题是,我怎么能添加一个简单的OR子句来返回任何带有“Title”=“New Joke”的文章,即使它不在“有趣”类别上?

似乎我无法正常工作......

编辑:我知道我必须切换到LeftOuterJoin,问题是关于构建此查询的正确语法。

Edit2 :为了更清楚,我正在尝试构建的SQL查询将是:

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

2 个答案:

答案 0 :(得分:1)

你需要使用像这样的Or标准:

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

答案 1 :(得分:1)

您可以使用普通的C#OR运算符:

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