Класс Person имеет ассоциацию по классу Identity (один к одному) FirstName и LastName являются свойством класса Person, а Sex и BirthDate являются свойством класса Identity.Как AliasJoin в QueryOver для этого образца
У меня есть SQL запрос в качестве следующих примеров:
select FirstName,LastName,Identity.Sex,Identity.BirthDate from Person_Person as Person
inner join Person_Identity as Identity on Person.Id = Identity.Person_id_fk
WHERE FirstName like '%jack%' and LastName like '%smit%'
Я преобразовать его в QueyOver.
var q = SessionInstance.QueryOver<Person>();
if (!String.IsNullOrEmpty(searchPersonDto.FirstName)) //necessary
q = q.Where(p => p.FirstName.IsLike(searchPersonDto.FirstName, MatchMode.Anywhere));
if (!String.IsNullOrEmpty(searchPersonDto.LastName)) //necessary
q = q.Where(p => p.LastName.IsLike(searchPersonDto.LastName, MatchMode.Anywhere));
Person aliasPerson = null;
q = q.SelectList(list => list
.Select(p => p.Id).WithAlias(() => aliasPerson.Id)
.Select(p => p.FirstName).WithAlias(() => aliasPerson.FirstName)
.Select(p => p.LastName).WithAlias(() => aliasPerson.LastName)
.Select(p => p.Identity.Sex).WithAlias(() => aliasPerson.Identity.Sex)
.Select(p => p.Identity.BirthDate).WithAlias(() => aliasPerson.Identity.BirthDate))
.TransformUsing(Transformers.AliasToBean<Person>());
q.List<Person>();
Но присоединяйтесь к этому запросу не правильно. Он делает исключение этим сообщением: could not resolve property: Identity.Sex of: Domain.Entities.Person
Как я должен присоединиться к личности от лица?
Обновлено: Добавить аналогичный Linq запрос
var q = SessionInstance.Query<Person>()
.Where(p => p.FirstName == searchPersonDto.FirstName)
.Select(p => new Person(p.Id)
{
FirstName = p.FirstName,
LastName = p.LastName,
Identity = new Identity()
{
Sex = p.PersonIdentity.Sex,
BirthDate = p.Identity.BirthDate
}
}).ToList<Person>();
Мне нужно запрос на QueryOver похож на вышеупомянутый вопрос по Linq.
Глядя на ваш запрос, вам вообще не нужен какой-либо псевдоним ... – Phill
@ Мне нужно написать псевдоним для 'q.List() 'вместо' q.List
no you do not. .List() уже возвращает вам тип IList –
Phill