4

我有一个使用 NHibernate 和 C# 语言的应用程序。我有一个具有一些关系的模型,我想创建一个查询以仅获取一个值。我试过这样的事情:

public long GetIdCompany(long number)
{
    return session.QueryOver<Report>()
                  .Where(x => x.Number == number)
                  .Select(x => x.Equipament.Company.Id)
                  .Take(1);
}

但我没有工作。我只是想把IdCompany模型放进去Report.Equipament.Company.Id。它可能在 queryover、linq、hql 等...

4

2 回答 2

9

你应该使用JoinAlias,所以你的请求看起来像

    public long GetIdCompany(long number)
    {
        Equipament equipamentAlias = null;
        return session.QueryOver<Report>()
                      .Where(x => x.Number == number)
                      .JoinAlias(x => x.Equipament, () => equipamentAlias)
                      .Select(x => equipamentAlias.Company.Id)
                      .SingleOrDefault<long>();
    }

这是QueryOver 的精彩介绍

于 2012-07-27T21:24:38.483 回答
8

高品质

return session.CreateQuery(
        "select e.Company.id from Report r " +
        "    inner join r.Equipament e " +
        "where r.Number = :number")
    .SetInt64("number", number)
    .UniqueResult<long>();

LINQ

return session.Query<Report>()
    .Where(x => x.Number == number)
    .Select(x => x.Equipament.Company.Id)
    .Single();

查询结束

请参阅 GSerjo 的回答

于 2012-07-27T13:11:07.747 回答