2013-12-15 4 views
0

이 엔티티가 있습니다. ClassB1과 ClassB2는 두 개의 별도 엔티티입니다. 그들은 별도의 테이블을 가지고 있지만 동일한 필드가 있습니다.nhibernate 질의, 특정 필드 만 선택

둘 다 별도의 테이블이있는 ClassC를 참조합니다.

ClassB1 classB1Alias = null; 
ClassB2 classB2Alias = null; 
ClassC classCAlias = null; 


    var query = s.QueryOver<ClassA>(); 
    if (!string.IsNullOrWhiteSpace(searchFilter.Property1)) 
    { 
     query.JoinAlias(d => d.ClassB1,() => classB1Alias); 
     query.WhereRestrictionOn(() => classB1Alias.Property1) 
      .IsLike("%" + searchFilter.Property1 + "%"); 

     query.JoinAlias(p => p.ClassB2,() => classB2Alias); 
     query.WhereRestrictionOn(() => classB2Alias.Property1) 
      .IsLike("%" + searchFilter.Property1+ "%"); 
    } 
    if (!string.IsNullOrWhiteSpace(searchFilter.Property2)) 
    { 
     query.JoinAlias(d => d.ClassB1.ClassC,() => classCAlias); 
     query.JoinAlias(d => d.ClassB2.ClassC,() => classCAlias); 
     query.WhereRestrictionOn(() => classCAlias.Property2) 
      .IsLike("%" + searchFilter.Property2+ "%"); 
    } 

    // select only Property1 and Property2 here 

    return query.List(); 

내가 본 예측하지만, 샘플은 기준 개체에 연결됩니다

ClassA 
    -> ClassB1 
     -> Property1 
     -> ClassC 
      -> Property2 
    -> ClassB2 
     -> Property1 
     -> ClassC 
      -> Property2 

은 지금까지 나는이 있고, 속성 1 및 Property2를 조회 할 필요가있다. 임 NHibernate에 그냥 새로운 내가

Select all ClassB1 and ClassB2 which have a Property1 equal to x where ClassB1.ClassC.Property2 and ClassB2.ClassC.Property2 equal to y

좀 여기에 도움이 필요해야 올바른 쿼리를 얻기 위해 오후 내내 코딩되어있다. 감사합니다.

ps. Property2에 대한 내 쿼리가 정확합니까?

+0

어떻게 이러한 테이블을 매핑 했습니까? 보여 줄래? –

답변

0

사용하기에 충분하지 않습니까?

query.Where(x => x.ClassB1Reference.Property1 == x && x.ClassB2Reference.Property1 == x). 
Where(x => x.ClassB1Reference.ClassCReference.Property2 == y && x.ClassB2Reference.ClassCReference.Property2 == y);