Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 无纤维的或存在的_Nhibernate_Queryover - Fatal编程技术网

Nhibernate 无纤维的或存在的

Nhibernate 无纤维的或存在的,nhibernate,queryover,Nhibernate,Queryover,将以下内容转换为Sql到nhibernate时遇到问题: SELECT DISTINCT Booking.* FROM Booking WHERE Booking.Status = 2 OR EXISTS (SELECT 1 FROM JourneyFuture WHERE JourneyFuture.BookingId = Booking.BookingId AND ((

将以下内容转换为Sql到nhibernate时遇到问题:

SELECT DISTINCT Booking.*
FROM   Booking WHERE  Booking.Status = 2
            OR EXISTS (SELECT 1
            FROM   JourneyFuture
            WHERE  JourneyFuture.BookingId = Booking.BookingId
                    AND ((JourneyFuture.[IsDriverAssigned] = 0
                        AND JourneyFuture.[Status] = 1) -- live
                        OR JourneyFuture.[Status] = 2
                        OR JourneyFuture.[Status] = 4
                        OR (JourneyFuture.[Status] = 1
                            AND (JourneyFuture.IsMetricCalculated = 0
                                    OR JourneyFuture.Duration = 0
                                    OR JourneyFuture.Distance = 0))))
Booking bookingAlias = null;    
var journeyFuture = QueryOver.Of<JourneyFuture>().Where(x=> x.Booking.Id==bookingAlias.Id).
                    And(x => (!x.IsDriverAssigned && x.Status==JourneyStatusType.Live) || x.Status==JourneyStatusType.CancelRequested
                                || x.Status == JourneyStatusType.Modified || 
                                (x.Status == JourneyStatusType.Live && (!x.IsMetricCalculated || x.Duration==0 || x.Distance==0)))
                                .Select(x=> x.Booking);

                var result = session.QueryOver<Booking>(() => bookingAlias)
                    .Where(x => x.Status == BookingStatusType.CancelRequested)
                    .WithSubquery.WhereExists(journeyFuture)
                    .List<Booking>();
以下是我到目前为止对Nhibernate的了解:

SELECT DISTINCT Booking.*
FROM   Booking WHERE  Booking.Status = 2
            OR EXISTS (SELECT 1
            FROM   JourneyFuture
            WHERE  JourneyFuture.BookingId = Booking.BookingId
                    AND ((JourneyFuture.[IsDriverAssigned] = 0
                        AND JourneyFuture.[Status] = 1) -- live
                        OR JourneyFuture.[Status] = 2
                        OR JourneyFuture.[Status] = 4
                        OR (JourneyFuture.[Status] = 1
                            AND (JourneyFuture.IsMetricCalculated = 0
                                    OR JourneyFuture.Duration = 0
                                    OR JourneyFuture.Distance = 0))))
Booking bookingAlias = null;    
var journeyFuture = QueryOver.Of<JourneyFuture>().Where(x=> x.Booking.Id==bookingAlias.Id).
                    And(x => (!x.IsDriverAssigned && x.Status==JourneyStatusType.Live) || x.Status==JourneyStatusType.CancelRequested
                                || x.Status == JourneyStatusType.Modified || 
                                (x.Status == JourneyStatusType.Live && (!x.IsMetricCalculated || x.Duration==0 || x.Distance==0)))
                                .Select(x=> x.Booking);

                var result = session.QueryOver<Booking>(() => bookingAlias)
                    .Where(x => x.Status == BookingStatusType.CancelRequested)
                    .WithSubquery.WhereExists(journeyFuture)
                    .List<Booking>();
bookingAlias=null;
var journeyFuture=QueryOver.Of()。其中(x=>x.Booking.Id==bookingAlias.Id)。
和(x=>(!x.IsDriverAssigned&&x.Status==JourneyStatusType.Live)| | x.Status==JourneyStatusType.CancelRequested
||x.Status==JourneyStatusType.Modified | |
(x.Status==JourneyStatusType.Live&(!x.IsMetricCalculated | | x.Duration==0 | | x.Distance==0)))
.选择(x=>x.Booking);
var result=session.QueryOver(()=>bookingAlias)
.Where(x=>x.Status==BookingStatusType.CancelRequested)
.WithSubquery.WhereExists(journeyFuture)
.List();
然而,这产生了一个有意义的“和”存在,但是我如何获得一个或存在


感谢您的帮助。

以下几点应该有效:

Booking bookingAlias = null;    
var journeyFuture = QueryOver.Of<JourneyFuture>().Where(x=> x.Booking.Id==bookingAlias.Id).
    And(x => (!x.IsDriverAssigned && x.Status==JourneyStatusType.Live) || x.Status==JourneyStatusType.CancelRequested
                || x.Status == JourneyStatusType.Modified || 
                (x.Status == JourneyStatusType.Live && (!x.IsMetricCalculated || x.Duration==0 || x.Distance==0)))
                .Select(x=> x.Booking);

var result = session.QueryOver<Booking>(() => bookingAlias)
    .Where(
        Restrictions.Or(
            Restrictions.Where(() => bookingAlias.Status == BookingStatusType.CancelRequested),
            Subqueries.Exists(journeyFuture.DetachedCriteria)))
    .List<Booking>();
bookingAlias=null;
var journeyFuture=QueryOver.Of()。其中(x=>x.Booking.Id==bookingAlias.Id)。
和(x=>(!x.IsDriverAssigned&&x.Status==JourneyStatusType.Live)| | x.Status==JourneyStatusType.CancelRequested
||x.Status==JourneyStatusType.Modified | |
(x.Status==JourneyStatusType.Live&(!x.IsMetricCalculated | | x.Duration==0 | | x.Distance==0)))
.选择(x=>x.Booking);
var result=session.QueryOver(()=>bookingAlias)
.在哪里(
限制。或(
限制。其中(()=>bookingAlias.Status==BookingStatusType.CancelRequested),
子查询.Exists(journeyFuture.DetachedCriteria)))
.List();
基本上用更强大的
限制替换
.WithSubquery
。或
子查询。存在
。我希望有一种方法可以用
.WithSubquery
,但我不确定是否有


一般来说,对于复杂的限制,您可以深入到
限制
类。这样做的缺点是通常会使代码更复杂。

谢谢Andrew,这正是我想要的。@Paddy:没问题!很乐意帮忙!