使用NHibernate Criteria API从引用对象获取特定结果的问题

时间:2010-06-25 02:11:04

标签: nhibernate

我有一个名为Class的类显示其中一个属性“Country”是对另一个表的引用。

显示课程

public class Show
{
    public virtual int ID { get; set; }
    public virtual Country CountryOrigin { get; set; }
    public virtual string EnglishName { get; set; }
}

国家/地区

public class Country
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
}

我已全部映射并正常工作,但现在我想获得更具体的结果。我使用了标准api来获取所有数据并对其进行排序,但现在我只想根据国家/地区名称获取节目。这是我认为可行的,但显然不是。

public IList<Show> AllShowsByCountry(string countryName)
{
    IList<Show> shows;

    shows = _session.CreateCriteria(typeof(Show))
        .Add(Restrictions.Eq("CountryOrigin.Name", "China" ))
        .AddOrder(Order.Asc("EnglishName"))
        .List<Show>();

    return shows;
}

我认为限制的第一部分可能与HQL类似,您可以使用对象。

1)我想我的问题是我误解了HQL的工作原理或标准或两者兼而有之? 2)您还将如何使用标准正确地做到这一点?

更新 这是我得到的错误

could not resolve property: CountryOrigin.Name of: Entities.Show

1 个答案:

答案 0 :(得分:4)

对于Criteria,请使用以下内容:

_session.CreateCriteria<Show>()
        .CreateAlias("CountryOrigin", "country")
        .Add(Restrictions.Eq("country.Name", countryName))
        .AddOrder(Order.Asc("EnglishName"))
        .List<Show>();

当然,当您不构建动态查询(搜索)时,HQL会更容易:

_session.CreateQuery(
@"
  from Show
  where CountryOrigin.Name = :countryName
  order by EnglishName
")
.SetParameter("countryName", countryName)
.List<Show>();

Linq总是摇滚:

_session.Query<Show>()
        .Where(s => s.CountryOrigin.Name = countryName)
        .OrderBy(s => EnglishName)
        .ToList();

.Query用于NH 3.x;用于2.x用于.Linq