我有这个简单的查询:
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'
答案 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")