0

我希望结果是单个 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 且数字低于 5 的 A。我该怎么做?我希望它尽可能通用,以便我可以在多个地方重复使用它。

4

1 回答 1

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>();
于 2013-05-03T09:08:09.143 回答