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%' )