2012-11-02 10 views
6

से एक भी स्ट्रिंग मान देने के लिए मैं एएसपी MVC 3 अनुप्रयोग में काम कर रहा हूँ। मेरे पास इतिहास नामक मॉडल/इकाई है। मेरे पास एक linq क्वेरी है जो एक मान देता है। मैं क्या कर के आधार पर, मैं या तो नियंत्रक में एक "वस्तु एक उदाहरण के लिए सेट नहीं" त्रुटि जब विधि कहा जाता है, या मैं एक मिल "परोक्ष स्ट्रिंग से परिवर्तित नहीं कर सकते टाइप करने के लिए Models.History।" तो मैं हल करने में सहायता की तलाश में हूं, क्या मुझे इसे या कुछ डालने की ज़रूरत है?LINQ - कैसे इकाई

यहाँ विधि है कि 'सेट नहीं ऑब्जेक्ट' त्रुटि देता है:

public string GetPastAbuseData(int Id) 
{ 

    var query = (from h in _DB.History 
       where h.ApplicantId.Equals(Id) 
       select h.AbuseComment).FirstOrDefault(); 

    return query.ToString(); 
} 

नियंत्रक: vm.HistoryModel.AbuseComment = repo.GetPastAbuseData (ईद);

और अगर मैं इतिहास को स्ट्रिंग से विधि प्रकार बदलने मैं 'नहीं बदल सकते' त्रुटि मिलती है:

public History GetPastAbuseData(int Id) 
{ 
    return (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h.AbuseComment).SingleOrDefault(); 
} 

अपने समय के लिए धन्यवाद।

उत्तर

11

आप HistoryObject से AbuseComment संपत्ति (जो स्ट्रिंग है) चुन रहे हैं। इस प्रकार अपने कोड History को स्ट्रिंग परिवर्तित करने के लिए प्रयास करता है। बस पूरे History इकाई वापसी:

public History GetPastAbuseData(int Id) 
{ 
    return (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h).SingleOrDefault(); 
} 

इसके अलावा पहले मामले query में स्ट्रिंग प्रकार का हो जाएगा। आप इस चर पर ToString कॉल करने के लिए की जरूरत नहीं है। इससे भी अधिक, जब आप OrDefault() मामले में गिर जाते हैं, तो आप NullReferenceException होगा।

public string GetPastAbuseData(int Id) 
{ 
    return (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h.AbuseComment).FirstOrDefault(); 
} 
+0

lazyberezovsky, धन्यवाद। अब यह इतना स्पष्ट लगता है कि आप इसे इंगित करते हैं। तो मैंने अभी पूरे मॉडल को वापस कर दिया और मेरे विचारों में आवश्यक चोटों को लिया। धन्यवाद। – BattlFrog

4

आपका पहला उदाहरण ठीक तुम सिर्फ अशक्त के लिए जांच करने की आवश्यकता है।

public string GetPastAbuseData(int Id) 
{ 

    var query = (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h.AbuseComment).FirstOrDefault(); 

    return query == null ? string.empty : query; 
} 
+0

स्ट्रिंग के लिए 'शून्य' मान होना ठीक है। आप इसे 'String.Empty' के साथ क्यों बदल रहे हैं? –

+0

बहुत से लोगों को स्ट्रिंग के लिए भी शून्य मान पसंद नहीं है। मैं आमतौर पर उस मामले में coalesce: वापसी सवाल ?? ""; – Dismissile

2

आप अशक्त कोलेसिंग ऑपरेटर जो अशक्त अगर जाँच और वापसी string.Empty अगर यह रिक्त है जाएगा उपयोग कर सकते हैं। ?? Operator

public string GetPastAbuseData(int Id) 
{ 
    return _DB.History.FirstOrDefault(h=>h.ApplicantId.Equals(Id)).Select(h=>h.AbuseComment) ?? string.Empty; 
} 
संबंधित मुद्दे