1

我有一个域对象,我正在尝试使用 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,我可以加入到我的请求集合中,但是我如何进入 RequestIndividual 集合以通过名字找到一个?

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);
4

1 回答 1

0

从这里

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

你来做这件事:

RequestIndividual requestIndividualAlias;

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

有一整套“QueryOver方法”,而不是x => x.are () => alias.。我通常总是更喜欢使用它们(并使用JoinAlias而不是JoinQueryOver),因为它是明确的你在说什么(JoinQueryOver你必须思考...... x => x.,但x什么是?

于 2013-08-07T18:12:24.720 回答