2016-10-08 2 views
0

Как добавить необязательные предложения where с QueryOver?Добавление необязательных параметров с Nhibernate и QueryOver

TL; DR

Я пытаюсь реализовать форму поиска для приложения и использовать QueryOver.
Некоторые параметры поиска являются необязательными.

  var query = 
      myDatabase.QueryOver(() => customerAlias) 
       .JoinAlias(() => customerAlias.Projects,() => projectAlias) 
       .Where(() => projectAlias.IsClosed >= 1) 
       ... possibly add more stuff 

ответ

3

QueryOver откладывается в исполнении как для обычных заявлений Linq. Он будет выполняться только тогда, когда вы вынудите его, вызвав метод финализации, такой как .List<T>().

var query = 
    myDatabase.QueryOver(() => customerAlias) 
     .JoinAlias(() => customerAlias.Projects,() => projectAlias) 
     .Where(() => projectAlias.IsClosed >= 1); 

if (myCondition) { 
    query = query.Where(...); 
} 

var result = query.List<T>(); //Or however else you want to make it execute. 

Вы все равно должны иметь доступ к линейным псевдониму тоже таким образом.

+0

Но что делать, если у меня есть 2 условия? 'query = query.AddWhere (...)'? – LosManos

+1

Вероятно, нет затрат на эффективность выполнения 'query.Where (condition1) .Where (condition2)' versus 'query.Where (condition1 && condition2)', конечно, есть нормальный LINQ, но я подозреваю, что Nhibernate будет генерировать то же самое SQL-запрос из обоих. Но вы также можете сделать это: http://stackoverflow.com/questions/22944722/what-is-the-best-way-to-dynamically-add-to-a-where-clause-in-a-nhibernate-query # 22948137 Хотя вы не получите свои персональные псевдонимы. – starlight54

+0

Тем, кто не понимал мой первоначальный комментарий (т.е. я), мой комментарий был о 'query.Where (...); query.Where (...)', где я думал, что второй вызов 'Where' будет перезаписывать сначала, но оказывается, что они объединяются; поэтому ответ правильный. – LosManos

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