使用NHibernate查询获取特定列

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

但我没有成功。我只想从模型 Report.Equipament.Company.Id 中获取 IdCompany。可以使用 queryover、linq、hql 等方法实现...


顺便说一句,你可能可以将其缩短为.Where(x => x.Number == number).Single().[Id prop] - SpaceBison
什么出了问题?你能给我们展示一个错误信息吗? - mathieu
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>();
    }

Here is excellent introduction to QueryOver


8

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

LINQ

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

QueryOver

请参考GSerjo的回答


1
@GSerjo 谢谢。指向了你的答案。 - Miroslav Popovic
谢谢你,Miroslav。我喜欢你的回答,但我想使用QueryOver。 - Felipe Oriani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接