Сложный запрос или запрос с использованием API QueryOver - PullRequest
1 голос
/ 16 июня 2011

У меня есть (упрощенная) иерархия классов, такая как:

public class Order
{
    public Customer Customer { get; set; }
    public Address Address { get; set; }
}
public class Customer
{
    public Address Address { get; set; }
}
public class Address
{
    public string CompanyName { get; set; }
    public string City { get; set; }
    public string Zip { get; set; }
}

Теперь мне нужно запросить Заказы, которые совпадают либо по CompanyName, City или Zip Адреса, но по Заказу или связанному с ним Клиенту.

Я дошел до:

public IList<Order> FindOrders(string search, ISession session)
{
    var orders = session.QueryOver<Order>()
          .Where(o => o.Address.City == search || o.Address.Zip == search || o.CompanyName == search).List();
}

Как включить клиента?

1 Ответ

2 голосов
/ 16 июня 2011

Вы имеете в виду адрес клиента? Если это так, я думаю, вы ищете что-то вроде этого:

public IList<Order> FindOrders(string search, ISession session)
{
    var orders = session.QueryOver<Order>(() => orderAlias)
          .JoinAlias(() => orderAlias.Customer, () => customerAlias)
          .Where(() => orderAlias.Address.City == search || orderAlias.Address.Zip == search || orderAlias.CompanyName == search)
          .Or(() => customerAlias.Address.City == search || customerAlias.Address.Zip == search || customerAlias.CompanyName == search)
          .List();
}

Если вы обнаружите, что пишете много подобных запросов, возможно, вы захотите сделать какой-нибудь полнотекстовый поиск, чтобы облегчить вашу жизнь (я бы порекомендовал lucene.net, возможно, через NHibernate.Search)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...