使用NHibernate Query获取特定列

Fel*_*ani 2 c# nhibernate queryover

我有一个使用NHibernate和C#语言的应用程序.我有一个模型与一些关系,我想创建一个查询只获得一个值.我尝试过这样的事情:

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

但我没有工作.我只是想参加IdCompany模特Report.Equipament.Company.Id.它可以在queryover,linq,hql等...

Mir*_*vic 7

HQL

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

LINQ

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

QueryOver

请参阅GSerjo的回答.


GSe*_*rjo 6

你应该使用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>();
    }
Run Code Online (Sandbox Code Playgroud)

以下是QueryOver的优秀介绍