2011-10-07 16 views
10

मेरे पास सी # और एएसपीनेट में एक टेबल है जो किसी अन्य तालिका की एक सूची का संदर्भ देती है जहां कई वाहन पंजीयक एक वाहन में मैप किए जाते हैं। मैं अपने व्यक्तिगत सदस्यों (उदा। 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

आप क्या देख रहे हैं या आप जिस एसक्यूएल को देखना चाहते हैं वह कैसा दिखता है? – Firo

+0

एसक्यूएल सभी बच्चों की जानकारी बच्चों के संग्रह के रूप में प्राप्त करेगी। एक जॉइन स्टेटमेंट के अंदर एक फोरैच लूप की तरह सॉर्ट करें। क्या मैं बच्चों के संग्रह में शामिल हो सकता हूं न केवल एक बच्चा? – joncodo

उत्तर

2

साथ ही आप NHibernate करने के लिए LINQ का उपयोग कर सकते, यह आमतौर पर प्रश्नों QueryOver एपीआई से समझने के लिए आसान बनाता है।

टिप्पणियों के आधार पर, मुझे लगता है कि आप निम्नलिखित हस्ताक्षर के साथ एक समारोह चाहते हैं:

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

या, यदि आप अपनी मूल Vehicle करने के लिए VehicleRegistrant से दिशा में एक रिश्ता है, यह भी

काम करेगा
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 और निम्नलिखित ThenFetch(x => x.Owner) के लिए VehicleRegistrants कहता है "और उन 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) 
संबंधित मुद्दे