2011-03-24 13 views

उत्तर

101

कार्यात्मक रूप से वे वही काम करते हैं, किसी अन्य इकाई में शामिल होते हैं। एकमात्र अंतर वह है जो वे वापस आते हैं। JoinQueryOver एक नई क्वेरीओवर लौटाता है जिसमें मौजूदा इकाई इकाई शामिल हो जाती है, जबकि JoinAlias ​​मूल क्वेरीओवर लौटाता है जिसमें वर्तमान इकाई मूल रूट इकाई के रूप में होती है। (http://nhibernate.info/doc/nh/en/index.html#queryqueryover से)

IQueryOver<Cat,Kitten> catQuery = 
    session.QueryOver<Cat>() 
     .JoinQueryOver<Kitten>(c => c.Kittens) 
      .Where(k => k.Name == "Tiddles"); 

और

Cat catAlias = null; 
Kitten kittenAlias = null; 
IQueryOver<Cat,Cat> catQuery = 
    session.QueryOver<Cat>(() => catAlias) 
     .JoinAlias(() => catAlias.Kittens,() => kittenAlias) 
     .Where(() => kittenAlias.Name == "Tiddles"); 

कार्यात्मक रूप में एक ही कर रहे हैं:

जो भी आप उपयोग व्यक्तिगत स्वाद की बात है। ध्यान दें कि बिल्ली के बच्चे एलीस को दूसरी क्वेरी में स्पष्ट रूप से संदर्भित किया गया है।

+6

नोट के नहीं हैं कि दूसरे उदाहरण में आप उपनाम 'बिल्ली का बच्चा kittenAlias ​​= अशक्त घोषित करने के लिए है कि उल्लेख करने के लिए एक प्रश्न के निर्माण कल्पित नामों का प्रयोग कर सकते हैं,' और 'बिल्ली catAlias ​​= शून्य;' पहले। मुझे यह गन्दा लगता है, इसलिए जब तक यह जरूरी नहीं है तब तक मैं 'JoinAlias' का उपयोग नहीं करता। – foka

+0

इसे स्पष्टीकरण के लिए @ एफओका धन्यवाद। मुझे यह याद आया और सोच रहा था कि यह क्यों काम नहीं कर रहा था। –

10

QueryOver Series - Part 2: Basics and Joining by Andrew Whitaker एक बहुत अच्छा विवरण देता है:

सारांश:

  • IQueryOver दो प्रकार पैरामीटर TRoot और TSubType
  • .Select साथ एक सामान्य प्रकार TRoot पर चल रही है, जबकि अन्य QueryOver तरीकों पर काम है TSubType। के रूप में आप एक प्रश्न का निर्माण कर रहे
  • TRoot ही रहता है, लेकिन TSubType बदल जाता है जब आप का उपयोग करके शामिल JoinQueryOver
  • JoinQueryOver और JoinAlias ऐड आपकी क्वेरी के लिए मिलती है। JoinAliasTSubType नहीं बदलता है, लेकिन JoinQueryOver करता है।
  • आप जब गुण है कि करने के लिए TRoot या TSubType
संबंधित मुद्दे