2013-07-02 148 views
0

我想要在所有分區狀態完全符合partitionName的情況下獲得所有分區狀態,或者在包含.時以該分區狀態開始。或QueryOver的約束條件

這是查詢我有

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>(); 

上述查詢產生和表達,但我希望它是一個OR。

在SQL它應該是這樣的:

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

回答

0

似乎沒有內置的方法,但它是可以通過限制進入其中,方法。

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>();