2017-09-21 56 views
7

मेरे पास एक सारणी है जिसमें एक स्ट्रिंग फ़ील्ड है जिसमें होस्टनाम हैं। वे ज्यादातर पूरी तरह से योग्य डोमेन नाम हैं लेकिन पिछले कुछ वर्षों में डोमेन "बिट" के बाद बिट्स बदल गए हैं क्योंकि विभिन्न DNS परिवर्तन हमारे ऊपर गिर गए हैं।सी # लिंक स्ट्रिंग इंडेक्स के साथ तुलना करें

tom.company.com 
tom.it.company.com 
tom.newComapnyBranding.com 
... 

मैं अक्सर "वर्तमान" होस्ट नाम और इस ऐतिहासिक दुकान के खिलाफ तुलना करना है: तो मैं मशीन "टॉम" के रूप में तालिका में है कि हो सकता है। की तरह कुछ कर रही:

WHERE 
    UPPER(SUBSTRING(@foo, 1, CHARINDEX(".", @foo))) = 
    UPPER(SUBSTRING(myDB.myTable.machineName, 1, CHARINDEX(".", myDB.myTable.machineName))) 

ठीक है, मैं एक LINQ क्वेरी में इनमें से किसी एक कन्वर्ट करने के लिए कोशिश कर रहा हूँ, लेकिन "अनुक्रमणिका" ओर से ठोकर कर रहा हूँ। मैं करीब आ गया हूं:

myTable.machineName.ToUpper().Substring(0, myTable.machineName.IndexOf(".")) 
    .Equals(foo.ToUpper().Substring(0, foo.IndexOf("."))) 

लेकिन दृश्य स्टूडियो "इंडेक्सऑफ" के बारे में शिकायत कर रहा है। उसका दावा है कि मैं करने के लिए indexOf को बदलने की जरूरत:

IndexOf(".", StringComparison.Ordinal)) 

लेकिन जब मैं इसे चलाने मैं अपवाद संदेश मिलता है:

LINQ to Entities does not recognize the method 'Int32 IndexOf(System.String, 
System.StringComparison)' method, and this method cannot be translated into 
a store expression 

तुम कैसे Linq में अनुक्रमित आधारित सबस्ट्रिंग इस तरह करते हैं?

+1

अपने फॉलो-ऑन सवाल पर,, एक नया सवाल पर ले जाते हैं तो कृपया प्रत्येक प्रश्न के स्वतंत्र और एक स्पष्ट और विशिष्ट विषय के साथ होने के लिए अनुमति देता है, के साथ अन्य लोगों की इजाजत दी समाधान तक पहुंचने के लिए एक ही समस्या (व्यक्तिगत रूप से)। –

उत्तर

7

इकाई फ्रेमवर्क को दिए गए अभिव्यक्तियां उन लोगों तक सीमित हैं जिन्हें SQL में अनुवादित किया जा सकता है। ईएफ को पता नहीं है कि एसक्यूएल में String.IndexOf का अनुवाद कैसे करें।

इसके बजाय आप SqlFunctions.CharIndex उपयोग कर सकते हैं:

SqlFunctions.CharIndex(machineName, ".") 
+0

धन्यवाद। पहले एसक्यूएलक्शन के बारे में कभी नहीं पता था। –

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