2013-08-21 52 views
0

QueryOver與該元素的一個約束是我嘗試做以下列表

var query = session.QueryOver<BaseEntity>() 
        .JoinAlias(x => x.FirstChild,() => FirstChildAlias) 
        .JoinAlias(x => x.SecondChild,() => SecondChildAlias) 
        .JoinAlias(() => SecondChildAlias.ListOfElementsChild,() => ListOfElementsChildAlias) 
        .Where(() => FirstChild.Text == "value 1") 
        .And(() => ListOfElementsChildAlias.Text =="value2"); 

我怎樣才能讓在內心的孩子是類型列表的約束!? 如何獲得列表中至少有一個列表中具有Text值等於「value2」的子列表的所有BaseEntity元素?

+2

不知道,但你可以給一個嘗試.WithSubquery.WhereExists這可能是有用的http://stackoverflow.com/q/7742453/1236044 – jbl

+0

@jbl是對的。一個'存在的'子查詢正是你需要的。請參閱[我的其他答案之一](http://stackoverflow.com/a/7376077/221708)瞭解如何執行此操作的一個很好的示例。 –

+0

其實我試過Exists並沒有工作!它檢索到與通緝結果不匹配的數據! 我用Criteria來解決這個問題,它工作。 – Ruba

回答

0

這是制定了我一個等效的解決方案:

   var query = session.CreateCriteria<BaseEntity>("BaseEntity") 
            .CreateCriteria("BaseEntity.FirstChild", "FirstChild") 
            .Add(Restrictions.Eq("FirstChild.Text", firstChildTextValue)) 
            .CreateCriteria("BaseEntity.SecondChild", "SecondChild") 
            .CreateCriteria("SecondChild.ListOfElementsChild", "ListOfElementsChild") 
            .Add(Restrictions.Eq("ListOfElementsChild.Text", listOfElementsChildTextValue)) 
            .List<BaseEntity>(); 
相關問題