2013-12-15 123 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);