0

我有这些实体:ClassB1 和 ClassB2 是两个独立的实体。它们有单独的表,但具有相同的字段。

它们都引用了具有单独表的 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

有点需要帮助。谢谢

附言。我对 Property2 的查询是否正确?

4

1 回答 1

0

用这个还不够吗?

query.Where(x => x.ClassB1Reference.Property1 == x && x.ClassB2Reference.Property1 == x).
Where(x => x.ClassB1Reference.ClassCReference.Property2 == y && x.ClassB2Reference.ClassCReference.Property2 == y);
于 2013-12-16T15:11:05.127 回答