我希望按名称获取所有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
答案 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>();