Person類具有Identity類的關聯(一對一)FirstName和LastName是Person類的屬性Sex和BirthDate是Identity類的屬性。Alias在此示例的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
我應該如何加入身份認證?
更新時間:通過QueryOver類似於上面的查詢由LINQ的添加類似的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>();
我需要一個查詢。
看你的查詢AliasToBeanTransformer,你根本不需要任何別名的東西... – Phill
@Phill我需要別名爲'q.List()'而不是'q.List
不,你沒有,.List()已經返回給你一個IList類型 –
Phill