2012-03-11 12 views
32

एंटीटी फ्रेमवर्क 4 में, मुझे एक समस्या का सामना करना पड़ रहा है जब मैं एक संग्रहीत प्रक्रिया में फ़ंक्शन आयात का उपयोग करता हूं और फिर स्केलर मान के रूप में उपयोग करता हूं। यह नीचे दिए गए कोड को उत्पन्न करता है:एंटीटी फ्रेमवर्क 4 में ऑब्जेक्ट रेसॉल्ट को कैसे संभालें 4

public virtual ObjectResult<Nullable<int>> GetTopEmployee() 
{ 
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>("GetTopEmployee"); 
} 

मैं इस विधि के वापसी मूल्य का उपयोग कैसे करूं?

उदाहरण के लिए, इस कोड को ठीक काम करता है:

NorthwindEntities db = new NorthwindEntities(); 
var i = db.GetTopEmployee(); 

लेकिन मैं केवल पूर्णांक के रूप में वापसी मान का उपयोग करना चाहते हैं। यदि मैं फंक्शन वैल्यू का उपयोग फ़ंक्शन आयात में गैर के रूप में करता हूं तो यह आउटपुट के रूप में -1 देता है।

जब मैं नीचे दिए गए कोड का प्रयास करें:

परोक्ष 'int'

के प्रकार 'System.Data.Objects.ObjectResult' कनवर्ट नहीं कर सकता:

NorthwindEntities db2 = new NorthwindEntities(); 
int j = db.GetTopEmployee(); 

यह कहने में कोई त्रुटि फेंकता

मैं उपर्युक्त कैसे पार्स करूं?

+1

कोड क्या है जो आउटपुट के रूप में '-1' देता है? मैं समझ नहीं पा रहा हूं "फंक्शन आयात में गैर के रूप में वापसी मूल्य"। –

+0

मेरा मतलब है कि फ़ंक्शन आयात के माध्यम से मेरी संग्रहीत प्रक्रिया को पुन: चालू करें और उसके बाद वापसी मान को किसी के रूप में चिह्नित न करें, फिर यह मुझे आउटपुट – user1037747

उत्तर

77

ध्यान दें कि GetTopEmployee का रिटर्न प्रकार ObjectResult<Nullable<int>> है। ObjectResult<T> लागू IEnumerable<T> इसलिए आपकी विधि एक से अधिक Nullable<int> लौटने में सक्षम है।

मुझे लगता है कि आप कर्मचारी के लिए आईडी का कुछ रूप प्राप्त करने की कोशिश कर रहे हैं। यदि आप पूरी तरह से सुनिश्चित हैं कि आप केवल एक परिणाम प्राप्त करने जा रहे हैं तो आप उस आईडी को प्राप्त करने के लिए निम्न कोड का उपयोग कर सकते हैं।

var topId = db.GetTopEmployee().FirstOrDefault(); 

शून्य हो सकता है। एक int परिणाम प्राप्त करने के लिए आपको topId.Value या var result = topId ?? -1; का उपयोग करना होगा।

NorthwindEntities db = new NorthwindEntities(); 
    int j = db.GetTopEmployee().FirstOrDefault() ?? -1; 
+0

के रूप में देता है यदि आप पूरी तरह से सुनिश्चित हैं कि आपको एक परिणाम प्राप्त करने जा रहे हैं, तो आपको 'db.GetTopEmployee ()। सबसे पहले() ', या अलग-अलग रखें, अगर आप कोई अपवाद प्राप्त नहीं करना चाहते हैं तो कोई अपवाद प्राप्त करना चाहते हैं। – xr280xr

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