我希望结果是单个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.我该怎么做?我希望它尽可能通用,这样我就可以在多个地方重复使用它。
答案 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>();