2011-10-07 14 views
10

C# ve ASP.net'de, birkaç araç tescil ettirenin tek bir araca eşlendiği başka bir tablonun listesini gösteren bir tablo var. Her bir üye tescil ettiren koleksiyonundan bireysel üyelerine (örneğin, vehicleRegistrantsAlias[0]) erişerek gitmek istemiyorum çünkü kaç tane olacağını bilmiyorum.Bir liste için bildirimde bulunun

Bunu iki sorguda yapmam gerekiyor mu? Gerçekten hepsini bir arada yapmak isterim. Araç sınıfı ve araç tescil ettirenlerin bir çocuk koleksiyonu olarak ebeveyn sınıfım var. Araç tescil ettireni bir taban türüdür ve bir araç tescil ettiren altında sahibi ve operatörüdür. Ayrıca diğer çocuk tabloları bilgi formunu da almak istiyorum. İyi çalışan araçlar için araçtanRegistrants'a katılıyorum; bununla birlikte, sahibi ve işletmeciyi de çekmek istiyorum. için

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

Bunu daha açık hale getirebilir miyim? Detaylandırmakta mutlu olurum. – joncodo

+0

Neye bakıyorsunuz veya sahip olmak istediğiniz sql nasıl görünecek? – Firo

+0

sql, tüm çocuk bilgilerini çocuk koleksiyonundan alır. Birleşim ifadesinin içindeki bir foreach döngüsü gibi. Sadece tek çocuğa değil, çocuk koleksiyonuna katılabilir miyim? – joncodo

cevap

2

Siz de NHibernate LINQ kullanabilirsiniz, genellikle QueryOver API daha anlamak için sorgular kolaylaştırır. Eğer kendi üst Vehicle için VehicleRegistrant den yönde bir ilişki varsa, bu da

çalışacak,

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

Veya: açıklamalara dayanarak

, ben aşağıdaki imzası ile bir işlev istiyorum sanırım
public Vehicle GetVehicle(VehicleRegistrant registrant) 
{ 
    var vehicle = session.Query<Vehicle>() 
         .FetchMany(x => x.VehicleRegistrants) 
         .ThenFetch(x => x.Owner) 
         .Where(x => x == registrant.Vehicle) 
         .SingleOrDefault(); 
} 

Tam olarak istediğin şeyin bu olduğundan emin değilim, ama fikrini aldığına inanıyorum. FetchMany(x => x.VehicleRegistrants), NHibernate öğesinin, sonuç kümesindeki her Vehicle için VehicleRegistrants öğesinin tümünü almasını söyler ve aşağıdaki ThenFetch(x => x.Owner) bildirir ve "bu VehicleRegistrants'un her biri için Owner ürününü de getir".

Bu yardımcı olur mu?

0

Değişim değişkenleri:

VehicleRegistration vehicleRegistrationsAlias = null; 
    VehicleRegistrant vehicleRegistrantsAlias = null; 

Değişim için JoinAlias ​​hatları:

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

Ve hevesle alıp bunu sorgusu.

Ayrıca List önce aramak:

.TransformUsing(Transformers.DistinctRootEntity) 
İlgili konular