2011-09-17 18 views
11

मैं एक साधारण QueryOverसरल QueryOver: अपरिचित विधि कॉल

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number)); 

संख्या फ़ील्ड प्रकार int है।

पहचाने न जाने वाले विधि कॉल: System.Int32: इस क्वेरी इस संदेश से एक रनटाइम त्रुटि है बूलियन बराबर (Int32)

+1

आप 'Person' की मैपिंग पोस्ट कर सकते हैं:

अपने कोड से ऊपर के रूप में लिखा की जाएगी देखते हुए? आप भी कोशिश कर सकते हैं। .Where (p => p.Number == संख्या' –

+0

धन्यवाद! प्रतिस्थापन '==' leiu द्वारा हल की गई समस्या बराबर है। int = int 'द्वारा' == 'और' बराबर 'के बीच क्या भिन्न है – Ehsan

उत्तर

27

== ऑपरेटर एक BinaryExpression जो एसक्यूएल और करने के लिए परिवर्तित किया जा सकता उत्पन्न करता है .Equals() विधि MethodCallExpression उत्पन्न करती है जो स्पष्ट रूप से SQL में कनवर्ट नहीं किया गया है।

आमतौर पर द्विआधारी ऑपरेटरों Linq में QueryOver में संभाला है और यह भी, लेकिन कुछ ही विधि कॉल नियंत्रित किया जाता है (string.Contains, array.Contains, आदि) ताकि आप बेहतर उपयोग ऑपरेटरों जब संभव हो रहे हैं।

यह भी याद रखें कि ऑपरेटर/विधि कॉल वास्तव में निष्पादित नहीं होते हैं, लेकिन एसक्यूएल स्टेटमेंट्स को परिवर्तित करते हैं ताकि यदि आपके पास कस्टम ओवरराइड/कार्यान्वयन हो, तो वे उम्मीद के अनुसार काम नहीं कर सकते हैं।

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number == number); 
+0

इससे कुछ काम बचाया गया। धन्यवाद – SadullahCeran

+0

बहुत बढ़िया स्पष्टीकरण, धन्यवाद! –

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