2014-05-12 5 views
7

स्ट्रिंग तुलना करने वाली इकाई को लिनक का उपयोग करते समय सफेद रिक्त स्थान को अनदेखा कर दिया जाएगा।स्ट्रिंग की तुलना में इकाई से लिंक सफेद रिक्त स्थान को अनदेखा करता है

मेरी तालिका में मेरे पास एक नाचर (10) कॉलम है, इसलिए यदि कोई 10 वर्ण नहीं है तो कोई भी डेटा सहेजा गया है, बाकी रिक्त रिक्त स्थान के साथ भर जाएगा। नीचे मैं "Four" स्ट्रिंग के साथ "ncharTextColumn" की तुलना कर रहा हूं। और यहां तक ​​कि सोचा ncharText "Four " बराबर यह एक मैच में परिणाम और "परिणाम" चर 1 रिकॉर्ड

 TestEntities1 entity = new TestEntities1(); 

     var result = entity.Table_1.Where(e => e.ncharText == "Four"); 

शामिल होंगे होगा वहाँ इस के लिए एक स्पष्टीकरण और एक तरह से यह आस-पास काम करने के लिए या मैं करने के लिए जा रहा हूँ है इस तरह के किसी भी comaprisons से पहले मेरी पूछताछ पर ToList कॉल करें।

var newList = result.ToList().Where(e => e.ncharText == "Four"); 

इस कोड को अब सही ढंग से 0 रिकॉर्ड रिटर्न के रूप में यह खाता सफेद रिक्त स्थान में ले जाता है। हालांकि तुलना करने से पहले सूची में कॉल करने से परिणामस्वरूप बड़े संग्रह को स्मृति में लोड किया जा सकता है जो उपयोग नहीं किया जा सकता है।

+1

क्या आप सिर्फ 'e.ncharText.Trim() == "चार" 'नहीं कर सकते थे? –

उत्तर

9

This उत्तर बताता है क्यों।

एसक्यूएल सर्वर एएनएसआई/आईएसओ SQL-92 विवरण इस प्रकार (धारा 8.2,, सामान्य नियम # 3) कैसे रिक्तियों के साथ तार की तुलना करने पर। ANSI मानक को तुलना में वर्णित वर्ण तारों के लिए पैडिंग की आवश्यकता होती है ताकि उनकी लंबाई उन्हें तुलना करने से पहले मिल सके। पैडिंग सीधे WHERE और हैविंग क्लॉज भविष्यवाणियों और अन्य ट्रांजैक्ट-एसक्यूएल स्ट्रिंग तुलनाओं के अर्थशास्त्र को प्रभावित करता है। उदाहरण के लिए, ट्रांजैक्ट-एसक्यूएल अधिकांश तुलना संचालन के लिए स्ट्रिंग्स 'एबीसी' और 'एबीसी' समकक्ष मानता है।

इस नियम का एकमात्र अपवाद पसंद है। जब LIKE predicate अभिव्यक्ति के दाएं पक्ष की पिछली स्थान के साथ एक मान है, तो तुलनात्मक होने से पहले SQL सर्वर समान मान पर दो मान पैड नहीं करता है। क्योंकि LIKE का उद्देश्य, परिभाषा के अनुसार, सरल स्ट्रिंग समानता परीक्षणों की तुलना में पैटर्न खोजों को की सुविधा प्रदान करना है, यह पहले वर्णित एएनएसआई एसक्यूएल-9 2 विनिर्देश के अनुभाग का उल्लंघन नहीं करता है।

आंतरिक रूप से LINQ बस आपके डेटाबेस के विरुद्ध SQL क्वेरी बना रहा है।

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