复杂模型的NHibernate QueryOver

时间:2013-08-07 18:05:18

标签: c# nhibernate fluent-nhibernate

我有一个域对象,我正在尝试使用QueryOver来搜索子,子集合的属性,我不知道如何使用QueryOver来处理它。

POCO看起来像这样:

public class Case {
    public virtual string CaseId { get; set; }
    public virtual string CaseNumber { get; set; }
    public virtual IList<Request> Requests { get; set; }
}

它有一系列请求:

public class Request {
    public virtual int RequestId { get; set; }
    public virtual IList<RequestIndividual> RequestIndividuals { get; set; }
}

其中包含一系列请求个人:

public class RequestIndividual {
    public virtual int RequestId { get; set; }
    public virtual string IndividualType { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string MiddleName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Company { get; set; }
}

使用NHibernate的QueryOver,我可以加入到我的Request集合,但是我如何进入RequestIndividual集合以通过FirstName找到它?

var query = _session.QueryOver<Case>();

if (!string.IsNullOrEmpty(finder.IndividualFirstName))
{
    query.JoinAlias(x => x.Requests, () => reuestsAlias, JoinType.LeftOuterJoin)
    // This is where I'm stumped. How to query the request for the individuals and find the first name?
}

更新:完整的查询看起来像这样,并且有效,感谢xanatos:

query.JoinAlias(x => x.Requests, () => reuestsAlias, JoinType.LeftOuterJoin)
                    .JoinAlias(() => reuestsAlias.RequestIndividuals, () => requestIndividiualAlias)
                    .Where(() => requestIndividiualAlias.FirstName == finder.IndividualFirstName);

1 个答案:

答案 0 :(得分:0)

从这里

query.JoinAlias(x => x.Requests, () => reuestsAlias, JoinType.LeftOuterJoin)

你这样做:

RequestIndividual requestIndividualAlias;

query.JoinAlias(() => reuestsAlias.RequestIndividuals, () => requestIndividualAlias);

QueryOver方法有一整套“x => x.而不是() => alias. JoinAlias。我通常总是喜欢使用它们(并且使用JoinQueryOver代替JoinQueryOver),因为它明确表达了你所说的内容(x => x.你需要思考...... {{1} },但是x是什么?