0

我希望結果是單個sql語句。 我有以下結構:如何使用NHibernate DtachedCriteria子查詢按引用實體屬性列表進行過濾?

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分離標準:

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

我想添加一個過濾器,將只返回A的含有B的數字低於5.我該怎麼做?我想盡可能通用,這樣我就可以在多個地方重複使用它。

回答

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

更新:從不同的子查詢

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

由於具有或者!但如果我想使用更多的1子查詢?我是否應該將CreateCriteria(「Bs」)resut賦值給一個參數,並將CreateCriteria(「Cs」)結果賦值給另一個參數並使用Restrictions.Or? – 2013-05-03 10:09:38

+0

然後使用CreateAlias(「property」,「alias」)和Restrictions.Or(...「alias.Property」...) – Firo 2013-05-03 14:37:07

+0

你能給我一個如何做2個子查詢和按他們的id過濾的例子號碼? (假設我正在使用問題中的結構)?我不確定在「或」函數調用中究竟會發生什麼。 – 2013-05-03 16:39:55

相關問題