或者QueryOver的约束

时间:2013-07-02 11:34:46

标签: nhibernate

我希望按名称获取所有PartitionStates,使其与partitionName完全匹配,或者在包含.时以其开头。

这是我的查询

return session.QueryOver<PartitionState>()
        .Where(p => p.Name == partitionName)
        .WhereRestrictionOn(p => p.Name).IsLike(partitionName + ".", MatchMode.Start)
        .OrderBy(p => p.StartDate).Desc
        .Take(1)
        .SingleOrDefault<PartitionState>();

上面的查询生成一个AND表达式,但我希望它是一个OR。

在SQL中它应该如下所示:

SELECT TOP 1 * 
FROM PartitionState 
WHERE (Name = @partitionName OR Name like @partitionName+'.%') 
ORDER BY StartDate DESC

1 个答案:

答案 0 :(得分:0)

似乎没有内置方法,但可以将限制传递到where方法。

return session.QueryOver<PartitionState>()
        .Where(Restrictions.Or(
              Restrictions.Where<PartitionState>(p => p.Name == partitionName),
              Restrictions.On<PartitionState>(p => p.Name).IsLike(partitionName + ".", MatchMode.Start)))
        .OrderBy(p => p.StartDate)
        .Desc.Take(1)
        .SingleOrDefault<PartitionState>();