2013-12-15 166 views
0

我有這些實體: ClassB1和ClassB2是兩個獨立的實體。他們有單獨的表格,但是有相同的字段。nhibernate查詢,只選擇特定字段

他們都有引用的ClassC有一個單獨的表。

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

我需要查詢Property1和Property2,到目前爲止我有這:

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

我看到突起而是將樣品連接到一個標準的對象。我只是新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);