QueryOver的子查询

Jam*_*sen 2 c# nhibernate subquery queryover

我在使用带查询的子查询时遇到问题.

这就是我所拥有的

      var address = QueryOver.Of<Address>()
            .Where(x => x.City.IsLike("%" + city + "%")).Select(x => x.Person.Id);

        var result = Session.QueryOver<Person>()
            .Where(x => x.Type.IsLike(type + "%"))
            .And(x => x.Name.IsLike("%" + name + "%"))
            .WithSubquery.WhereExists(address);
Run Code Online (Sandbox Code Playgroud)

我有一个人的桌子,一个人有多个地方.

所以人的身份,姓名,类型

和地址将有PersonId和城市等.

因此,想要按名称和类型以及地址表中的城市搜索某个人

Kei*_*amo 6

尝试这样的事情:

Address address = null;
Person person = null;
var addressSubQuery = QueryOver.Of<Address>(() => address)
    .Where(Restrictions.EqProperty(Projections.Property(() => address.Person.Id), Projections.Property(() => person.Id)))
    .Where(() => address.City.IsLike("%" + city + "%"));

    var result = Session.QueryOver<Person>(() => person)
        .Where(x => x.Type.IsLike(type + "%"))
        .And(x => x.Name.IsLike("%" + name + "%"))
        .WithSubquery.WhereExists(addressSubQuery);
Run Code Online (Sandbox Code Playgroud)

您需要使用QueryOver的别名版本.这样,您可以从最终链接到主查询的其他查询中引用Person元素.

这与执行以下操作相同

Select * from Person
Where 
    Type like '%foo%'
    and Name like '%bar%'
    and exists ( select Id from Address 
                 where 
                      Address.PersonId = Person.Id
                      and Address.City like '%bar%' )
Run Code Online (Sandbox Code Playgroud)