我有一个以下有效的SQL查询:
SELECT * FROM truck t
WHERE t.currentlocationdbid IN (SELECT dbid FROM location WHERE name = 'Los Angeles')
OR t.nextdestinationdbid IN (SELECT dbid FROM location WHERE name = 'Chicago' OR name = 'New York');
我想用NHibernate编写。当然,通过对每个实体进行多次DB访问,它都可以工作,但是我想一次完成。研究了带有this,this或this之类的分离查询的示例,但没有一个对我有用。试图同时使用别名和条件。
数十种尝试之一:
var subQuery1 = QueryOver.Of<LocationEntity>().Where(l => l.Name == LocationNameEnum.LA);
var subQuery2 = QueryOver.Of<LocationEntity>().Where(l => l.Name == LocationNameEnum.CHG || l.Name == LocationNameEnum.NY);
var poc = session.QueryOver<TruckEntity>()
.WithSubquery.WhereProperty(t => t.CurrentLocation).In(subQuery1)
.WithSubquery.WhereProperty(t => t.NextDestination).In(subQuery2)
.List<TruckEntity>();
预先感谢您的任何建议。
答案 0 :(得分:2)
您几乎完全正确,在SQL中仅缺少.Where(Restrictions.Disjunction()...)
的{{1}}。
基于您的代码(假设您在or
中拥有属性Id
)
LocationEntity