2012-03-21 11 views
8

मेरे पास कोड-बैक फ़ाइल में एएसपीनेट पृष्ठ पर एक कोड सेगमेंट था। मैंने इसे एक मॉड्यूल (general_functions.vb) में सार्वजनिक सबराउटिन में स्थानांतरित करने का निर्णय लिया। एक बार मैंने ऐसा किया, हालांकि, कोड अब काम नहीं करता है - यह एक त्रुटि फेंकता है।LINQ से संस्थाएं विधि को पहचान नहीं पाती हैं System.ObjectCompareObjectEqual

मूल पर कोड-पीछे मैं एक कॉल की तरह तो साथ मूल कोड की जगह:

DeleteResidency(people_id, semester, year) 

अब मेरी general_functions.vb में मैं एक सार्वजनिक सबरूटीन बनाई गई इस प्रकार की तरह:

Public Sub DeleteResidency(delpeople_id, delsemester, delyear) 
    Using dbContext as pbu_housingEntities = New pbu_housingEntities 
     Dim remove_selection = (From p in dbContext.Residents _ 
           Where p.people_code_id = delpeople_id _ 
           Where p.year = delyear _ 
           Where p.semester = delsemester _ 
           Order By p.id Descending _ 
           Select p).FirstOrDefault 
    End Using 
End Sub 

वहाँ इसके मुकाबले इसके लिए अधिक कोड है, लेकिन ऊपर दिया गया कोड त्रुटि को फेंकता है। त्रुटि मैं मिलता है:

संस्थाओं को LINQ विधि 'System.Object CompareObjectEqual (System.Object, System.Object, बूलियन)' विधि, और को नहीं पहचानता है इस विधि एक दुकान में अनुवाद नहीं किया जा सकता अभिव्यक्ति।

क्या कोई यह समझने में मेरी सहायता कर सकता है कि यह क्यों हो रहा है?

+2

'सेमेस्टर' का प्रकार क्या है? – Eranga

+0

सभी मूल्य स्ट्रिंग के रूप में डाले जाते हैं। – davemackey

+3

मुझे संदेह है कि आपकी स्थितियों में कुछ गैर-आदिम प्रकार की तुलना है। – Eranga

उत्तर

10

स्पष्ट रूप से DeleteResidency सब रूटीन की परिभाषा में अपने पैरामीटर टाइप करें। यह कंपाइलर को अनुमान लगाने के लिए कम छोड़ देता है और इन प्रकार की त्रुटियों को रोकता है।

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