如何使用NHibernate DtachedCriteria子查询按引用实体属性列表进行筛选?

时间:2013-05-02 17:00:57

标签: nhibernate subquery nhibernate-criteria detachedcriteria

我希望结果是单个sql语句。 我有以下结构:

public class B
{
    public virtual int Id { get; set; }
    public virtual int BNumber { get; set; }
}
public class A
{
    public virtual int Id { get; set; }
    public virtual IList<B> Bs { get; set; }
    public virtual int ANumber { get; set; }
}

如果我有一个独立的标准,用高于6的数字过滤A:

DetachedCriteria.For<A>().Add(Restrictions.Gt("ANumber", 6))
                         .Add(Subqueries.???).List<A>();

我想添加一个过滤器,它只会返回包含B的A,而Number低于5.我该怎么做?我希望它尽可能通用,这样我就可以在多个地方重复使用它。

1 个答案:

答案 0 :(得分:3)

DetachedCriteria.For<A>()
    .Add(Restrictions.Gt("ANumber", 6))
    .CreateCriteria("Bs")
        .Add(Restrictions.Lt("BNumber", 5))
    .List<A>();

更新:拥有来自不同子查询的Or

DetachedCriteria.For<A>()
    .Add(Restrictions.Gt("ANumber", 6))
    .CreateAlias("Bs", "b")
    .CreateAlias("Cs", "c")
    .Add(Restrictions.Or(
        Restrictions.Lt("b.Number", 5),
        Restrictions.Lt("c.Number", 5))
    .List<A>();