2009-11-27 4 views
0

내 프로젝트에서는 Lines을 그룹화 할 수 있으며 Group 유형은 Crossing (1) 또는 Parallel (2) 중 하나 일 수 있습니다. 적어도 하나의 지정된 유형 (이 경우 1)의 그룹을 가진 모든 행을 찾아야합니다. 주어진 행의 ID는 그룹의 LineA 또는 LineB 열에있을 수 있습니다. 여기에 내가 지금까지 가지고있는 곳이있다 :적어도 하나의 자식 객체로 부모 객체를 쿼리하기위한 NHibernate 조건?

Criteria crit = session.CreateCriteria(typeof(Line), "ln"); 

DetachedCriteria count = DetachedCriteria.For<Group>() 
.SetProjection(Projections.CountDistinct("Id")) 
.Add(Expression.Or(
    Expression.EqProperty("LineA", "ln.Id"), 
    Expression.EqProperty("LineB", "ln.Id"))) 
.Add(Expression.Eq("GroupTypeId", 1)); 

crit.Add(Subqueries.Gt(0, count)); 
+0

검색어가 괜찮아 보입니다. 이 작업을 수행하는 더 나은 방법을 찾고 계시거나 쿼리가 제대로 작동하지 않습니까? – tolism7

+0

작동하지 않습니다. 예외가 발생하지만 메시지를 기억할 수 없습니다. 나는 그것을 작동시키고 응답을 게시 할 것이다 – svallory

+0

당신은 당신이 받고 있던 무슨 예외를 검사하고 당신의 질문으로 배치하는 시간을 걸려야한다. – UpTheCreek

답변

0

나는 그것을 얻었다!

crit.Add(Expression.Sql(
    "EXISTS(select 1 from Group" + 
    "WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+ 
    "AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32)); 

{alias} 개체에 대한 틀이 조회되고있다.

+0

그래도 실제로는 기준을 사용하지 않습니다. – UpTheCreek