NHibernate带有in子句的多个子查询

时间:2019-03-04 13:49:04

标签: c# nhibernate queryover

我有一个以下有效的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访问,它都可以工作,但是我想一次完成。研究了带有thisthisthis之类的分离查询的示例,但没有一个对我有用。试图同时使用别名和条件。

数十种尝试之一:

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>();

预先感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

您几乎完全正确,在SQL中仅缺少.Where(Restrictions.Disjunction()...)的{​​{1}}。

基于您的代码(假设您在or中拥有属性Id

LocationEntity