我在使用带有 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);
我有一个人员表,并且一个人有多个地址。
所以 人 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%' )
关于c# - 使用 QueryOver 进行子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328287/