4

NHibernate と C# 言語を使用するアプリケーションがあります。いくつかのリレーションを持つモデルがあり、値を 1 つだけ取得するクエリを作成したいと考えています。私はこのようなことを試しました:

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

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

リンク

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

クエリオーバー

GSerjo の回答を参照してください。

于 2012-07-27T13:11:07.747 に答える