서브 쿼리 "IN"파라미터에 커스텀 SQL을 사용할 수 있습니까? 현재 서브 쿼리 (subQueryEstate)를 성공적으로 구축하고 있지만, 복잡한 데이터 세트를 처리하는 데는 많은 시간이 걸릴 수 있습니다. 다음과 같이 우리의 기존의 서브 쿼리를 사용하여 쿼리를 생성하는 코드는 다음과 같습니다임시 테이블을 사용하는 NHibernate와 커스텀 SQL 서브 쿼리
session.QueryOver(() => cAlias)
.WithSubquery.WhereProperty(x => x.CPE.ID).In(subQueryEstate)
.JoinAlias(x => x.Costs,() => aCosts, JoinType.LeftOuterJoin)
.JoinAlias(x => x.Open,() => aOpen, JoinType.InnerJoin)
.List();
우리가 ID 년대로 채워집니다 임시 테이블 (트랜잭션 수명주기)를 사용하는 아이디어가 실행 속도를 향상시킬 수 있습니다. 아이디어는 임시 테이블에 조인하거나보다 복잡한 원본 대신에 훨씬 간단한 서브 쿼리 (SELECT ID FROM TEMP_TABLE)를 사용하는 것입니다.
NHibernate에서 하위 쿼리로 매핑되지 않은 테이블을 사용할 수 있습니까? 사용자 지정 SQL을 작성하거나 IN 절에 매개 변수로 전달할 분리 기준을 만들 수 있습니까? NHibernate가 나머지 쿼리에 대해 정확한 SQL을 생성하고 있다는 사실을 보존하고 싶습니다.
이상적으로 같은 :
session.QueryOver(() => cAlias)
.WithSubquery.WhereProperty(x => x.CPE.ID).In("SELECT ID FROM TEMP_TABLE")
.JoinAlias(x => x.Costs,() => aCosts, JoinType.LeftOuterJoin)
.JoinAlias(x => x.Open,() => aOpen, JoinType.InnerJoin)
.List();
생각? 아이디어? 우리가 생각하지 못한보다 우아한 해결책이있을 수 있습니다.
내가 여기 최선의 방법이 될 수있는 중 하나 IDS 또는 전체 고장 기록을 반환하는 저장된 프로 시저를 사용하여 생각합니다. – Rippo