2012-06-12 18 views
9

मेरे पास linq से NHibernate तक कोई प्रश्न है। Request तालिका कोई पंक्तियां हैंडेटाबेस में डेटा मौजूद नहीं होने के लिए linq से NHibernate में अधिकतम

var q = SessionInstance.Query<Request>().Max(e => e.Code); 

हैं, तो इस क्वेरी के निष्पादन के इस संदेश के साथ GenericADOException को जन्म देती है:

{"Could not execute query[SQL: SQL not available]"}

{"Value cannot be null.\r\nParameter name: item"}

मुझे क्या करना चाहिए?

उत्तर

11

इस

SessionInstance.Query<Request>().Max(x => (int?)x.Code); 
+0

कलाकार इस काम को क्यों बनाते हैं? 'X.Code'' int? 'से कुछ और था? (मैं बस सीखना चाहता हूं, अपने उत्तर का प्रचार नहीं करना)। –

+0

@GertArnold मुझे नहीं पता, यह सिर्फ काम करता है :) लेकिन मुझे लगता है कि यह निबर्ननेट लिनक प्रदाता से संबंधित कुछ है। –

+1

ठीक है, आपकी प्रतिक्रिया के लिए धन्यवाद। शायद कोई इस पर कुछ प्रकाश डाल सकता है। –

1

मुझे लगता है कि इस Linq करने वाली Nhibernate साथ काम करना चाहिए का प्रयास करें:

var q = SessionInstance.Query<Request>().Select(e => e.Code) 
    .DefaultIfEmpty().Max(); 

या हो सकता है DefaultIfEmpty(<some value>)

+0

प्रदर्शन के लिए डेटाबेस में कई रिकॉर्ड के लिए आपका समाधान उपयुक्त नहीं है। – Ehsan

+0

क्यों नहीं? DefaultIfEmpty अधिक रिकॉर्ड्स नहीं लाएगा, अनुक्रम खाली होने पर यह केवल एक मान जोड़ देगा। –

+3

NHibernate linq प्रदाता के लिए DefaultIfEmpty लागू नहीं किया गया है और NHHernate 3.3.1.4000 संस्करण –