2011-05-20 6 views
2

У меня небольшая проблема: я бы ввел условие в свой QueryOver, который также проверяет значение переменной. Что-то вроде этого:NHibernate QueryOver Restrinctions для переменной

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 синтаксисом что-то вроде

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

Так что, если я моя переменная заполняется я фильтр на моем поле. Если моя переменная пуста (или null), я буду выбирать каждую запись без фильтрации любого содержимого.

Как достичь этого результата с помощью QueryOver и Restrinctions? Спасибо!

ответ

7

Если переменная null или не установлена, не добавляйте ее в запрос.

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

Смежные вопросы