У меня странное требование, я не знаю, как его решить.
Предполагая следующее определение класса:
public class Client
{
public Guid Id { get; set; }
public String Person { get; set; }
public IList<Client> SecondaryClients { get; set; }
public Client PrimaryClient { get; set; }
}
public class Person
{
public Guid Id { get; set; }
public String Name { get; set; }
}
Когда пользователь ищет в системе клиента по имени,он должен искать все первичные клиенты, а также вторичные клиенты, которые находятся на расстоянии одного шага.(т.е. если PrimaryClient установлен, то нам нужно проверить свойство PrimaryClient.Person.Name, однако нам не нужно беспокоиться о PrimaryClient.PrimaryClient.)
Используя DetachedCriteria, у меня есть следующее:
var clientQuery = DetachedCriteria.For<Client>();
clientQuery.Add(Restrictions.Disjunction()
.Add(Restrictions.Like("Person.Surname", lastName, MatchMode.Start))
.Add(Restrictions.Like("PrimaryClient.Person.Surname", lastName, MatchMode.Start))
.Add(Restrictions.Like("SecondaryClients.Person.Surname", lastName, MatchMode.Start)));
var session = OpenSession();
session.BeginTransaction();
var clients = clientQuery.GetExecutableCriteria(session).Future<Client>();
session.Transaction.Commit();
session.Close();
Теперь, очевидно, это далеко.Покопавшись, я обнаружил, что нужно настроить псевдонимыПервое было легко найти Person.Sameame:
var clientQuery = DetachedCriteria.For<Client>();
clientQuery = clientQuery.CreateAlias("Person", "p");
clientQuery.Add(Restrictions.Disjunction()
.Add(Restrictions.Like("p.Surname", lastName, MatchMode.Start))
.Add(Restrictions.Like("PrimaryClient.Person.Surname", lastName, MatchMode.Start))
.Add(Restrictions.Like("SecondaryClients.Person.Surname", lastName, MatchMode.Start)));
var session = OpenSession();
session.BeginTransaction();
var clients = clientQuery.GetExecutableCriteria(session).Future<Client>();
session.Transaction.Commit();
session.Close();
Однако, для моей жизни я не уверен, что я могу сделать для псевдонима PrimaryClient.Person.Я иду по неправильному пути здесь?Любая помощь будет оценена.
ПРИМЕЧАНИЕ: я забыл упомянуть первоначально.Возможно, что SecondaryClients и PrimaryClient равны нулю.