2013-03-12 3 views
10

मैं इस तरह के परिणामस्वरूप लिनक में अपनी परिणाम पूछने की कोशिश कर रहा हूं;LINQ टू एंटिविटीज में केस इन-सेंसिटिव सर्चिंग

var categoriesList = _catRepo.GetAllCategories(); 


filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for")); 

हालांकि, मैं किसी भी परिणाम क्योंकि CategoryName डेटाबेस में For(Upper Case) है नहीं मिलता है। मैंने एसक्यूएल सर्वर संयोजन की भी जांच की है और यह _CI_AS पर सेट है। मुझे कोई विचार नहीं है केस असंवेदनशील स्ट्रिंग को फ़िल्टर करने के लिए कैसे उपयोग किया जाए? मैं मूल रूप से चाहता हूं अगर कोई ऐसा टाइप करता है;

filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for")); 

या

filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("For")); 

परिणाम होना चाहिए एक ही

+3

क्या यह सवाल का उत्तर देता है? http://stackoverflow.com/questions/3360772/linq-contains-case-insensitive –

+0

यह मेरे लिए काम नहीं करता –

+1

मुझे लगता है कि आम तौर पर आपके द्वारा कहने वाले संयोजन के साथ काम करता है। क्या आप सुनिश्चित हैं कि 'श्रेणियां सूची' एक डीबी क्वेरी है और स्मृति सूची में पहले से ही पूछताछ नहीं की गई है (जिस स्थिति में आपकी अभिव्यक्ति का अनुवाद एसक्यूएल में नहीं किया जाएगा)। इसके अलावा, यदि आप उस बिंदु पर डीबी प्रश्नों का पता लगाते हैं, तो एसक्यूएल क्या उत्पन्न किया जा रहा है? –

उत्तर

17

इस

filteredCategories = categoriesList.Where(c=> 
c.CategoryName.IndexOf("for", StringComparison.OrdinalIgnoreCase) >= 0) 

शामिल पद्धति के रूप में नीचे

public bool Contains(string value) 
{ 
    return this.IndexOf(value, StringComparison.Ordinal) >= 0; 
} 
दिखाया काम करता है की कोशिश करो
+2

+1 के लिए सूचकांक की व्याख्या के लिए आप सभी को धन्यवाद? –

+0

http://msdn.microsoft.com/en-us/library/ms224425.aspx – Shymep

+9

यह ईएफ ऑब्जेक्ट्स पर सीधे काम करने पर काम नहीं करेगा। 'इंडेक्सऑफ() ' – Rufix

6

पिछले IndexOf उत्तर काम करना चाहिए। चूंकि आप डेटाबेस से सभी इकाइयों को लोड कर रहे हैं और फिर इन-मेमोरी (ऑब्जेक्ट्स के लिए linq) फ़िल्टर कर रहे हैं, तो आप डेटाबेस पर कुछ भी नहीं कर रहे हैं।

यह भी एक अलग रूप में

filteredCategories = categoriesList.Where(c=> c.CategoryName.ToLower().Contains("for")); 

बस (पोस्ट मैं संदर्भित से) काम करना चाहिए, यदि आप श्रेणियों की एक बहुत कुछ है, तो आप डेटाबेस पर उन्हें फिल्टर करने के लिए है, बजाय से सभी लाने चाहते हो सकता है डीबी और फिर उन्हें स्मृति में फ़िल्टर करें ..

+0

में इंडेक्सऑफ को किसी भी तरह से कॉल किया जाएगा – Shymep

+0

@Shymep Yup मुझे पता है, मैं सिर्फ पूर्णता के लिए इसे एक ऑफर कर रहा था :) –

+1

यह तुर्की टेस्ट पास नहीं करता है http://www.moserware.com/2008/02/does - आपका कोड-पास-टर्की-test.html – Odys

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