QueryOver by join и добавление условий по Independent, если - PullRequest
3 голосов
/ 17 сентября 2011

У меня есть QueryOver от JoinQueryOver В Nhibernate 3.1

Класс Person имеет ассоциацию по классу идентификации (один-к-одному). Код - это поле класса Person, а FirstName - поле класса Identity.

var q = SessionInstance.QueryOver<Person>()
        .Where(p => p.Code.IsLike(code,MatchMode.Start))
        .Full.JoinQueryOver(p => p.Identity);

if (!String.IsNullOrEmpty(firstName))
   q = q.Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

return q.List<Person>();

этот результат верный, но есть проблема.Поиск не включает элементы по нулевому значению для поля Код в классе Person.Я исправил следующий запрос.

var q = SessionInstance.QueryOver<Person>()
        .Full.JoinQueryOver(p => p.Identity);

if (!String.IsNullOrEmpty(Code))
   q = q.Where(i => i.Person.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
   q = q.Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));

return q.List<Person>();

Теперь у меня возникла ошибка во время выполнения этого сообщения:

не удалось разрешить свойство: Identity.Code of: MyNameSpace.Domain.Entities.Идентичность

в запросе путем объединения двух классов. Как можно добавить два условия (где) с помощью if.

(if parameter != null)

1 Ответ

3 голосов
/ 19 сентября 2011
Identity identityAlias = null;
var q = SessionInstance.QueryOver<Person>()
        .Full.JoinAlias(p => p.Identity, () => identityAlias);

if (!String.IsNullOrEmpty(code))
   q.Where(p => p.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
   q.Where(() => identityAlias.FirstName.IsLike(firstName, MatchMode.Anywhere));

или

var q = SessionInstance.QueryOver<Person>();

if (!String.IsNullOrEmpty(code))
    q.Where(p => p.Code.IsLike(code, MatchMode.Start));

if (!String.IsNullOrEmpty(firstName))
    q.Full.JoinQueryOver(p => p.Identity)
        .Where(i => i.FirstName.IsLike(firstName, MatchMode.Anywhere));
...