2011-05-20 50 views
2

我有一個小問題:我會插入一個條件到我的查詢也檢查變量值。事情是這樣的:NHibernate QueryOver對一個變量的抑制

var qOver = QueryOver.Of<MyModel>(() => myMod) 
       .JoinAlias(() => myMod.SubMod,() => subMod, JoinType.LeftOuterJoin) 
        .Where(Restrictions.Or(
         Restrictions.On(() => myMod.ID).IsIn(MyIDList) 
         , Restrictions.On(MyIDList == null)) 

在SQL sintax類似

WHERE @Variable = '' OR MyTable.MyField = @Variable 

所以,如果我我的變量被填充,我會在我的字段進行篩選。如果我的變量是空的(或空),我會選擇每個記錄沒有過濾任何內容。

如何使用QueryOver和Restrinctions達到此結果? 謝謝!

回答

7

如果該變量爲空或未設置,請不要將其添加到您的查詢中。

var qOver = QueryOver.Of<MyModel>(() => myMod) 
    .JoinAlias(() => myMod.SubMod,() => subMod, JoinType.LeftOuterJoin); 

if(MyIDList != null) 
    qOver = qOver.Where(Restrictions.Or(Restrictions.On(() => myMod.ID).IsIn(MyIDList)) 
+0

不可能......這種簡單的解決方案几乎不能相信:)是的,它工作正常!謝謝!! – Faber 2011-05-20 12:51:19