2011-10-07 3 views
10

여러 차량 등록자가 단일 차량에 매핑 된 다른 테이블의 목록을 참조하는 C# 및 ASP.net 테이블이 있습니다. 얼마나 많은 사람들이 있을지 모르기 때문에 개별 회원 (예 : vehicleRegistrantsAlias[0])에 액세스하여 차량 등록자 전체를 관망하고 싶지 않습니다.목록에 대한 조인문

두 개의 쿼리에서이 작업을 수행해야합니까? 나는 그것을 모두 하나로하고 싶다. 부모 클래스는 차량으로, 아동 수집 차량 등록자가 있습니다. 차량 등록자는 기본 유형이며 차량 등록자는 소유자와 운영자입니다. 나는 또한 다른 자식 테이블로부터 정보를 가져오고 싶다. 나는 차량에서 차량으로 합류하고있다. 그러나 나는 또한 소유자와 조작원을 끌어 들이고 싶다. 에

Vehicle vehicleAlias = null; 
List<VehicleRegistration> vehicleRegistrationsAlias = null; 
List<VehicleRegistrant> vehicleRegistrantsAlias = null; 

.JoinAlias(() => vehicleAlias.VehicleRegistrations,() => vehicleRegistrationsAlias) 
.JoinAlias(() => vehicleAlias.VehicleRegistrants,() => vehicleRegistrantsAlias) 

//from vehicle registrants 
.JoinAlias(() => vehicleRegistrantsAlias[0].,() => vehicleSuspensionTypeAlias) 
+0

더 이상 명확하게 할 수 있습니까? 나는 정교하게 기쁠 것이다. – joncodo

+0

무엇을 찾고 계십니까? 또는 원하는 SQL이 어떻게 생겼을까요? – Firo

+0

sql은 모든 자식 정보를 자식 컬렉션으로 가져옵니다. 일종의 join 문 안에있는 foreach 루프와 같습니다. 나는 한 명의 아이뿐만 아니라 어린이들의 모임에 가입 할 수 있습니까? – joncodo

답변

2

당신은뿐만 아니라 자 NHibernate에 LINQ를 사용할 수 있습니다, 그것은 일반적으로 QueryOver API를보다 이해하기 쿼리가 쉬워집니다. 당신이 부모 Vehicle-VehicleRegistrant의 방향으로 관계가있는 경우,이 또한

을 작동합니다,

public Vehicle GetVehicle(VehicleRegistrant registrant) 
{ 
    var vehicle = session.Query<Vehicle>() 
         .FetchMany(x => x.VehicleRegistrants) 
         .ThenFetch(x => x.Owner) 
         .Where(x => x.VehicleRegistrants.Contains(registrant)) 
         .SingleOrDefault(); 
} 

또는 : 의견을 바탕으로

, 나는 다음과 같은 서명 기능을 원하는 것 같아요
public Vehicle GetVehicle(VehicleRegistrant registrant) 
{ 
    var vehicle = session.Query<Vehicle>() 
         .FetchMany(x => x.VehicleRegistrants) 
         .ThenFetch(x => x.Owner) 
         .Where(x => x == registrant.Vehicle) 
         .SingleOrDefault(); 
} 

정확히 이것이 원하는지 확실하지 않지만 아이디어를 얻은 것으로 알고 있습니다. FetchMany(x => x.VehicleRegistrants)은 NHibernate가 결과 집합 내의 각 Vehicle에 대해 VehicleRegistrants을 모두 가져 오도록 지시하고, 다음은 ThenFetch(x => x.Owner)이 "와 VehicleRegistrants 각각에 대해서도 Owner을 가져온다"라고 알려줍니다.

이 정보가 도움이됩니까?

0

변경 변수 :

VehicleRegistration vehicleRegistrationsAlias = null; 
    VehicleRegistrant vehicleRegistrantsAlias = null; 

변경에 JoinAlias ​​라인 :

.JoinAlias(() => vehicleAlias.VehicleRegistrations,() => vehicleRegistrationsAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
.JoinAlias(() => vehicleAlias.VehicleRegistrants,() => vehicleRegistrantsAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin) 

그리고 열심히 가져옵니다 쿼리.

또한 목록 전에 전화 :

.TransformUsing(Transformers.DistinctRootEntity) 
관련 문제