QueryOver的子查询
我在使用带查询的子查询时遇到问题。
这就是我所拥有的
var address = QueryOver.Of() .Where(x => x.City.IsLike("%" + city + "%")).Select(x => x.Person.Id); var result = Session.QueryOver() .Where(x => x.Type.IsLike(type + "%")) .And(x => x.Name.IsLike("%" + name + "%")) .WithSubquery.WhereExists(address);
我有一个人的桌子,一个人有多个地方。
所以人的身份,姓名,类型
和地址将有PersonId和城市等。
因此,想要按名称和类型以及“地址”表中的“城市”搜索某个人
尝试这样的事情:
Address address = null; Person person = null; var addressSubQuery = QueryOver.Of(() => address) .Where(Restrictions.EqProperty(Projections.Property(() => address.Person.Id), Projections.Property(() => person.Id))) .Where(() => address.City.IsLike("%" + city + "%")); var result = Session.QueryOver(() => 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%' )