QueryOver的子查询

| 我在将子查询与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);
我有一个用于Person的表,并且一个人有多个地址。 所以 人   ID,名称,类型 和地址将有   PersonId和城市等 因此要按名称和类型以及“地址”表中的“城市”搜索人     
已邀请:
        尝试这样的事情:
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);
您需要使用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%\' )
    

要回复问题请先登录注册