2011-05-31 11 views
6

मैं Teacher और StudentReport के बीच एक माता पिता के बच्चे का रिश्ता है। जब शिक्षक ने रिपोर्ट समाप्त की तो प्रत्येक StudentReport में टाइमस्टैम्प फ़ील्ड रिकॉर्डिंग होती है। मैं सभी शिक्षकों जो एक या पहले मिनट की एक निश्चित संख्या के रूप में अपनी रिपोर्ट के और अधिक पूरा कर लिया है खोजने के लिए एक प्रश्न है:NHibernate क्वेरी रिटर्न केवल आंशिक बच्चे संग्रह

public IList<Teacher> FindRecentlyActiveTeachers(int intervalMinutes) 
    { 
     if (intervalMinutes <= 0) 
      throw new ArgumentException("Interval must be a positive number of minutes"); 

     DateTime activityCutoff = DateTime.Now.AddMinutes(-1 * intervalMinutes); 

     return Session.QueryOver<Teacher>() 
      .Left.JoinQueryOver<StudentReport>(t => t.StudentReports) 
      .Where(r => r.FirstSaveTimestamp >= activityCutoff) 
      .TransformUsing(Transformers.DistinctRootEntity) 
      .List<Teacher>(); 
    } 

यह शिक्षकों की सही सूची लौटाती है, लेकिन प्रत्येक शिक्षक के लिए बच्चे को संग्रह केवल शामिल चयन मानदंड से मेल खाने वाली रिपोर्टें। मैं मानदंडों को पूरा करने वाली कुछ रिपोर्टों के लिए, प्रत्येक मिलान करने वाले शिक्षक की रिपोर्ट संग्रह को सभी रिपोर्ट्स में शामिल करना चाहता हूं।

वहाँ किसी तरह मैं या तो पूर्ण बच्चे संग्रह बेसब्री से लोड कर सकते हैं, या इस क्वेरी में यह लोड हो रहा है छोड़ देते हैं और आलसी लोड हो रहा है उस पर निर्भर है?

 return Session.QueryOver<Teacher>() 
      .Fetch(t => t.StudentReports).Eager 
      .JoinQueryOver<StudentReport>(t => t.StudentReports) 
      .Where(r => r.FirstSaveTimestamp >= activityCutoff) 
      .TransformUsing(Transformers.DistinctRootEntity) 
      .List<Teacher>(); 
+0

बस एक यादृच्छिक टिप अपने प्रश्न से संबंधित नहीं लायें:

अद्यतन

यह समाधान है। अपने अंतराल को अस्वीकार करने के लिए आप '-इंटरवल मिनट' लिख सकते हैं और यह आपको पारित सकारात्मक संख्या का नकारात्मक मूल्य देगा। '-1 * अंतराल के साथ' – Phill

उत्तर

2

उपयोग

return Session.QueryOver<Teacher>() 
    .Fetch(t => t.StudentReports) 
    .Where(r => r.FirstSaveTimestamp >= activityCutoff) 
    .TransformUsing(Transformers.DistinctRootEntity) 
    .List<Teacher>(); 
+0

ऐसा करने के बजाय! धन्यवाद। मैं अभी भी क्वेरीओवर सिंटैक्स सीख रहा हूं, और यह उदाहरण देख रहा हूं, मुझे लगता है कि मैं अपने कुछ अन्य प्रश्नों को साफ़ कर सकता हूं। –

+0

मुझे भी रेमंड :) – gandil

संबंधित मुद्दे